0

我正在尝试首先将代码与现有数据库一起使用。到目前为止一切顺利,但现在我在一对多对一的关系中失败了。

db 中有一个表客户和一个表地址,其中地址没有任何 customerid,而是一个外来的一对多键 FK_Address_Customer。

从 edmx 自动创建的类看起来像

顾客:

public int CustomerID (PK)
public Address Address

地址:

public int AddressID (PK)
public HashSet<Customer> Customers

无论我在 fluent 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 传递外键名称,但也没有运气。

如何让这种简单的关系继续下去?

谢谢

4

1 回答 1

2

您必须告诉 EF Customer 表中 FK 的名称,否则它将使用 default Address_AddressIDHasForeignKey会变魔术。

pModelBuilder.Entity<Customer>()
             .HasRequired(c => c.Address)
             .WithMany(a => a.Customers)
             .HasForeignKey(c => c.AddressID);

您的实体AddressID中的 FK 属性在哪里。如果您需要使用Customer的实体中没有 FK 属性:CustomerMap

pModelBuilder.Entity<Customer>()
             .HasRequired(c => c.Address)
             .WithMany(a => a.Customers)
             .Map(m => m.MapKey("AddressID"));

AddressID表中 FK 列的名称在哪里Customer。您总是需要该列具有一对多关系。

在您的实体中拥有和不拥有 FK 属性之间的区别会影响 EF 支持的两种类型的关联

于 2012-08-18T08:15:53.193 回答