【发布时间】: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