我正在使用EF6 Code First。
我有一个类库" IdentitySecurity"包含上下文" IdentityDBContext"这指向了#34; IdentitySecurity"数据库和IdentityModels。
然后我的网络项目包含一个上下文" ProjectDBContext"指向"项目"数据库和ProjectModels。
如果我在ProjectModels中创建这样的模型:
public class Project
{
public int ProjectId { get; set; }
public virtual IdentitySecurity.Models.ApplicationUser UpdateUser { get; set; }
}
它无法创建迁移,我认为这是因为它无法与另一个数据库建立外键关系并期望它位于项目数据库中。
尝试创建新迁移时出现的错误是:
在模型生成期间检测到一个或多个验证错误:
Project.Models.IdentityUserLogin :: EntityType' IdentityUserLogin'没有定义键。定义此EntityType的键。 Project.Models.IdentityUserRole :: EntityType' IdentityUserRole'没有定义键。定义此EntityType的键。 IdentityUserLogins:EntityType:EntitySet' IdentityUserLogins'基于类型' IdentityUserLogin'没有定义键。 IdentityUserRoles:EntityType:EntitySet' IdentityUserRoles'基于类型' IdentityUserRole'没有定义键。
我遇到的另一个例子是我有一个配置表,多个应用程序在公共数据库区域中使用。我试图在这样的模型中引用它:
public virtual Common.Models.CommonItem CommonItem {get;组; }
在这种情况下,它添加了迁移并更新了数据库而没有错误,但它所做的实际上是创建表" CommonItem"在项目数据库中,而不是使用公共数据库中的那个。
有没有办法设置EF6 CodeFirst所以我可以在另一个数据库中拥有配置表或ASPIdentity表,并仍然将它们作为虚拟对象引用?
谢谢。
答案 0 :(得分:0)
我担心外键引用你必须将所有内容都移到一个数据库中并让ProjectDbContext
继承IdentityDbContext
。