0

我有两个类:客户和协会。

一个客户可以与许多客户有关联。每个关联都具有定义的类型(家庭、朋友等),即客户 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; }
}

我已经删除了数据注释,因为我无法编译它。我得到错误:

“无法检查模型兼容性,因为数据库不包含模型元数据”。

有没有人有任何想法?

4

2 回答 2

0

有时在数据库创建过程中发生错误时会发生这种情况。然后创建数据库模式 - 除了__MigrationHistory表。当您再次运行您的应用程序时,EF 希望检查该__MigrationHistory表是否架构仍然与模型保持同步,并且如果该表不存在,它会引发您遇到的异常。

要解决此问题,请手动删除数据库或将初始化程序设置为DropCreateDatabaseAlways<MyContext>(with Database.SetInitializer(new DropCreateDatabaseAlways<MyContext>())- only once。创建数据库后,将其设置回原始初始化程序。

顺便说一句:对于您的模型,您必须明确指定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);
于 2013-07-31T17:38:36.397 回答
0

谢谢Slauma,您的回答使我们朝着正确的方向前进。我们在 Association 配置中添加了以下配置:

HasRequired(x => x.AssociatedCustomer).WithMany().WillCascadeOnDelete(false);
于 2013-08-01T12:52:48.400 回答