database - 用于业务数据和身份的不同表或不同数据库

标签 database asp.net-mvc-5 asp.net-identity

我通读了 Apress - Pro Asp.Net MVC 5 和身份框架的免费章节,现在,我想创建一个包含一些数据和身份的小型示例应用程序。

稍后我想对 Windows Azure 进行测试部署。

现在,我应该为这个应用程序创建一个包含所有数据(产品,无论什么,IdentityData(用户帐户,Oauth 链接...))的数据库,还是创建两个数据库更好?

我知道,如果我创建两个,我将能够为其他 MVC 应用程序使用相同的身份数据,但是是否有某种 MVC 最佳实践?

最佳答案

在这个领域本身没有“最佳实践”。这取决于您的个人应用程序的需求。我可以告诉你的是,如果你选择使用多个数据库,你最终会得到一个有些支离 splinter 的应用程序。这听起来像是一件坏事,但请记住,在某些情况下这是一个有效的选择。我的意思很简单,如果您要将身份与应用程序的其余部分分开,需要两个数据库和两个上下文,那么就没有办法将您的 ApplicationUser 与你的申请。

例如,假设您创建了一个评论网站。 Review 将是您的应用程序上下文中的一个类,ApplicationUser 当然将是您的身份上下文中的一个类。你永远不能做这样的事情:

public class Review
{
    ...

    public virtual ApplicationUser ReviewedBy { get; set; }
}

这通常会导致在 reviews 表上创建一个外键,指向 users 表中的一行。但是,由于这两个表位于不同的数据库中,所以这是不可能的。事实上,如果您要做这样的事情, Entity Framework 会意识到这个问题,并实际将 ApplicationUser 附加到您的应用程序上下文,并尝试在您的应用程序数据库中为其生成一个表。

不过,您可以做的只是存储用户的 ID:

public string ReviewedById { get; set; }

但是,同样,这不是外键。如果您需要用户实例,则必须执行两步过程:

var review = appContext.Reviews.Find(reviewId);
var user = indentityContext.Users.Find(review.ReviewedById);

一般来说,最好将所有应用程序数据放在一起,包括身份等。但是,如果您做不到,或者有一个业务案例无法做到这一点,您仍然可以做几乎任何您需要做的事情,只是会变得更加艰巨并导致更多查询。

关于database - 用于业务数据和身份的不同表或不同数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28744514/

相关文章:

c# - Asp.Net MVC 5 身份创建数据库管理界面

database - 为什么很多表ORACLE默认12c?

Android SQL 数据库找不到正确的行

mysql - MySQL 中复合唯一键是否有索引?

c# - 如何将 Dictionary 绑定(bind)到 ASP.NET MVC 5 Razor 模板引擎中的部分 View

c# - 没有 ASP.NET Identity 的 ASP.NET Core 中的 Google 身份验证

c# - SQL查询按时间太慢

jquery - 如何在 MVC5 View 中使用 jquery Accordion

jquery - 自定义 JQuery 向导以合并部分 View

c# - Identity UpdateAsync 丢失 IdentityResult.Failed