我阅读了apress-pro asp.net mvc 5和identity框架的免费章节,现在,我想创建一个包含一些数据和identity的小示例应用程序。
稍后,我想对windows azure进行测试部署。
现在,我应该为这个应用程序创建一个单独的数据库,包含所有数据(产品,无论如何,identitydata(用户帐户,oauth链接…)还是最好创建两个数据库?
我知道,如果我创建两个,我就可以在其他mvc应用程序中使用相同的标识数据,但是mvc是否有某种最佳实践?
最佳答案
在这个领域没有“最佳实践”。这取决于您的个人应用程序的需要。我能告诉你的是,如果你选择使用多个数据库,你最终会得到一个有点断裂的应用程序。这听起来是件坏事,但请记住,在某些情况下,这是一个有效的选择。我的意思是,如果要将标识与应用程序的其他部分分开,需要两个数据库和两个上下文,那么就无法将ApplicationUser
与应用程序中的任何其他对象关联起来。
例如,假设您创建了一个评论站点。Review
将是应用程序上下文中的类,ApplicationUser
当然是标识上下文中的类。你永远不能做这样的事:
public class Review
{
...
public virtual ApplicationUser ReviewedBy { get; set; }
}
这通常会导致在reviews表上创建一个外键,指向users表中的一行。但是,由于这两个表位于不同的数据库中,这是不可能的。事实上,如果您要这样做,实体框架会意识到这个问题,并实际将
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/