我可以在同一个项目中有多个DbContexts

时间:2015-07-09 17:40:24

标签: c# entity-framework

在我们的项目中,我们为代码第一个数据库提供了一个DbContext,它运行正常。我已经创建了第二个DbContext(AppDbContext)来封装登录信息。它将指向同一个数据库,但不需要查看所有表,也不需要迁移。

当Identity系统在我的用户管理器中初始化此上下文时:

echo '<tr><td colspan ="3"><a href="'.$webPath.'"target="_blank">'.$webPath.'</a></td></tr>';

我收到错误:

  

无法确定类型“PublicationSystem.Model.Organization”和“PublicationSystem.Model.Resource”之间关联的主要结尾。必须使用关系流畅API或数据注释显式配置此关联的主要结尾。

AppDbContext不应处理这两个表。我怎么能让它忽略它们呢?有两个DbContext文件甚至实用吗?

以下是AppDbContext的样子:

 var manager = new MkpUserManager(new UserStore<MkpUser, MkpRole, Guid, MkpLogin, MkpUserRole, MkpClaim>(context.Get<AppDbContext>()));

1 个答案:

答案 0 :(得分:1)

每个项目/解决方案可以有多个上下文,没有任何问题。我经常这样做。但是我认为将两个上下文指向同一个数据库并不是一个好主意。

你会遇到问题: - 谁负责更新数据库的架构? - 如果您使用代码优先迁移,那么只有两个数据库必须使用的_MigrationHistory表。我认为未来会出现奇怪的问题。

我认为通过将两个上下文指向同一个数据库,你就是1 /承担了很多不必要的风险,2 /不遵循EF的预期用法。使用ASP.NET身份,推荐的方法,似乎有一个单独的数据库(或称他们称为存储)来管理身份验证。

您将拥有一个用于身份验证的商店(这是您存储用户密码的位置),并且您将拥有一个用于授权的数据库,其中还包含所有业务数据。例如,两者之间的链接可以是电子邮件地址。

您在身份验证数据库中查找用户,如果可以,则将其登录并使用主数据库执行常见业务任务。要快速修复设计,只需更改包含登录信息的DB的连接字符串即可。