【问题标题】:EF 6 Code First ASPIdentity Tables in separate database单独数据库中的 EF 6 Code First ASPIdentity 表
【发布时间】:2014-11-03 21:11:39
【问题描述】:

我使用的是 EF6 代码优先。

我有一个类库“IdentitySecurity”,其中包含指向“IdentitySecurity”数据库和 IdentityModels 的上下文“IdentityDBContext”。

然后,我的 Web 项目包含一个上下文“ProjectDBContext”,该上下文指向“Project”数据库和 ProjectModel。

如果我像这样在 ProjectModels 中创建模型:

public class Project
{
    public int ProjectId { get; set; }

    public virtual IdentitySecurity.Models.ApplicationUser UpdateUser { get; set; }
}

它无法创建迁移,我认为这是因为它无法与另一个数据库建立外键关系并期望它在 Project 数据库中。

当你尝试创建一个新的迁移时它得到的错误是这样的:

在模型生成过程中检测到一个或多个验证错误:

Project.Models.IdentityUserLogin: : EntityType 'IdentityUserLogin' 没有定义键。定义此 EntityType 的键。 Project.Models.IdentityUserRole: : EntityType 'IdentityUserRole' 没有定义键。定义此 EntityType 的键。 IdentityUserLogins:EntityType:EntitySet 'IdentityUserLogins' 基于没有定义键的类型'IdentityUserLogin'。 IdentityUserRoles: EntityType: EntitySet 'IdentityUserRoles' 基于没有定义键的类型'IdentityUserRole'。

我遇到的另一个与此类似的示例是我有一个配置表,多个应用程序在一个公共数据库区域中使用它。我试图在这样的模型中引用它:

公共虚拟 Common.Models.CommonItem CommonItem { get;放; }

在这种情况下,它添加了迁移并没有错误地更新了数据库,但它所做的实际上是在项目数据库中创建表“CommonItem”,而不是使用公共数据库中的表。

有没有办法设置 EF6 CodeFirst,这样我就可以在另一个数据库中拥有配置表或 ASPIdentity 表,并且仍然将它们作为虚拟对象引用?

谢谢。

【问题讨论】:

    标签: ef-code-first entity-framework-6 asp.net-identity-2


    【解决方案1】:

    恐怕对于外键引用,您必须将所有内容移至一个 DB 并让 ProjectDbContext 继承自 IdentityDbContext

    Sql Server does not support foreign keys across databases.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多