我正在尝试首先使用现有数据库的代码。到目前为止它进展顺利,但现在我在一对多关系中失败了。
在db中有一个表客户和一个表地址,其中地址没有任何customerid,而是一个外部的一个到多个键FK_Address_Customer。
edmx中自动创建的类看起来像
客户:
public int CustomerID (PK)
public Address Address
地址:
public int AddressID (PK)
public HashSet<Customer> Customers
无论我在流畅的API中做什么,都会因无效列Address_AddressID失败或多重性与引用约束错误冲突。
我假设://Customer has one address, address can have multiple customers<br/>
pModelBuilder.Entity<Customer>().HasRequired(m => m.Address).WithMany(x => x.Customers);
//Address has multiple customers, customer has one address<br/>
pModelBuilder.Entity<Address>().HasMany(m => m.Customers).WithRequired();
我在其他表上使用HasForeignKey在数据库中没有外键,但是在上面的场景中它不起作用。我也试过通过MapKey传递外键名也没有运气。
我可以得到这种简单的关系吗?
由于
答案 0 :(得分:2)
您必须在Customer表中告知EF FK的名称,否则它将使用默认Address_AddressID
。 HasForeignKey
会发挥魔力。
pModelBuilder.Entity<Customer>()
.HasRequired(c => c.Address)
.WithMany(a => a.Customers)
.HasForeignKey(c => c.AddressID);
AddressID
实体中Customer
是FK属性的位置。如果您在Customer
实体中没有FK属性,则需要使用Map
:
pModelBuilder.Entity<Customer>()
.HasRequired(c => c.Address)
.WithMany(a => a.Customers)
.Map(m => m.MapKey("AddressID"));
AddressID
是Customer
表中FK列的名称。您始终需要该列具有一对多关系。
在您的实体中拥有和不拥有FK属性之间的区别在two types of associations supported by EF之间存在差异。