gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:46:38 25 4
gpt4 key购买 nike

我通读了 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com