分离身份表'和商业表'共享外键时{D44Contexts

时间:2016-12-26 21:56:12

标签: asp.net asp.net-mvc entity-framework asp.net-core

我使用IdentityServer作为API的授权服务器。它是一个单独的ASP.NET Core Identity + IdentityServer4项目,用于处理用户登录/登录/注册/等。我的商业' API位于单独的ASP.NET Core Web API项目中。

我正在使用Entity Framework Core代码优先迁移来为这两个项目生成数据库表。

Auth Server项目在其ApplicationDbContext(默认身份DbContext)中拥有所有默认的Identity用户表,正如您所期望的那样。

但是,商务API服务器需要拥有自己的表。这些表中的大多数都需要一个UserId外键(例如,在todo app中,API会有todo items表,其中users和todo项目具有一对多的FK关系)。这意味着API服务器拥有我自己定义的DbContexts,大多数DbSets都与用户具有外键关系(ApplicationUser)。

我该如何设置? EF Core似乎不支持跨多个DbContexts的FK关系。此外,这样做,您必须两次注入上下文类(每个项目一次),这需要复制我的连接字符串。我知道我可以让我的Auth Server项目也处理我的业务表(就像添加更多DbSets一样简单),但我想将它们分开。是否有一种干净,惯用的方式来做这件事,还是我以错误的方式思考这个问题?

1 个答案:

答案 0 :(得分:0)

我这样做的方法是将User表添加到Business DbContext中,当用户在Identity DbContext中注册时,该表插入了一行。该User行具有对Indentity DbContext中创建的Id的引用,但可用作外键,因为它与Business DbContext中的其他表位于相同的DbContext中。