2013-07-31 170 views
0

我有两个类:Customer和Association。向同一主表的两个外键

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

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

"Model compatibility cannot be checked because the database does not contain model metadata".

有没有人有任何想法?

回答

0

有时会在数据库创建过程中发生错误时发生。然后创建数据库模式 - 除了__MigrationHistory表。当您再次运行应用程序时,如果架构仍然与模型保持同步,并且该表不存在,则EF想要检查__MigrationHistory表中的异常,并引发异常。对于你的模型:BTW只一次数据库创建后设置回原来的初始化

-

要解决这个问题,或者手动删除数据库或初始化设置为DropCreateDatabaseAlways<MyContext>(与Database.SetInitializer(new DropCreateDatabaseAlways<MyContext>())。你必须明确指定Customer.Associations有关Association.Customer,无论是与数据注解...

[InverseProperty("Customer")] 
public virtual ICollection<Association> Associations { get; set; } 

...或者用流利的API:

modelBuilder.Entity<Customer>() 
    .HasMany(c => c.Associations) 
    .WithRequired(a => a.Customer) 
    .HasForeignKey(a => a.CustomerId); 
0

谢谢Slauma, 您的回答让我们朝着正确的方向前进。 我们在关联配置中增加了以下配置:

HasRequired(x => x.AssociatedCustomer).WithMany().WillCascadeOnDelete(false); 
相关问题