我有两个班级:客户和协会。
客户可以与许多客户建立联系。每个关联都是定义类型(家庭,朋友等),即客户A是客户B的朋友。客户A与客户C相关。关联类型由枚举AssociationType定义。
为了在EF中创建它,我定义了以下类
public class Customer
{
public string FirstName {get; set;}
public string LastName {get; set;}
public virtual ICollection<Association> Associations { get; set; }
}
public class Association
{
public int CustomerId { get; set; }
public virtual Customer Customer { get; set; }
public int AssociatedCustomerId { get; set; }
public virtual Customer AssociatedCustomer { get; set; }
public AssociationType AssociationType { get; set; }
}
我删除了数据注释,因为我无法将其编译。我收到错误:
“无法检查模型兼容性,因为数据库没有 包含模型元数据“。
有没有人有任何想法?
答案 0 :(得分:0)
有时在数据库创建期间发生错误时会发生这种情况。然后创建数据库模式 - 除了__MigrationHistory
表。当您再次运行应用程序时,如果模式仍然与模型保持同步,则EF希望检查__MigrationHistory
表,如果该表不存在,则会抛出您遇到的异常。
要解决此问题,请手动删除数据库或将初始化程序设置为DropCreateDatabaseAlways<MyContext>
(使用Database.SetInitializer(new DropCreateDatabaseAlways<MyContext>())
- 仅一次。创建数据库后,将其设置回您的原始初始化程序。
BTW:对于您的模型,您必须明确指定Customer.Associations
与Association.Customer
相关,或者使用数据注释...
[InverseProperty("Customer")]
public virtual ICollection<Association> Associations { get; set; }
...或使用Fluent API:
modelBuilder.Entity<Customer>()
.HasMany(c => c.Associations)
.WithRequired(a => a.Customer)
.HasForeignKey(a => a.CustomerId);
答案 1 :(得分:0)
谢谢Slauma, 你的回答让我们朝着正确的方向前进。 我们将以下配置添加到关联配置:
HasRequired(x => x.AssociatedCustomer).WithMany().WillCascadeOnDelete(false);