使用 Entity Framework 5
我有一个客户。客户可能有许多地址,但至少有一个。其中一个地址也将被设置为主要地址(必需的)。我尝试了各种映射,但到目前为止,在构建时或者填充数据库时都会出现错误。
客户:
public class Customer
{
public int CustomerId { get; set;}
public String CustomerName { get; set; }
public int PrimaryAddressId { get; set; }
public virtual CustomerAddress PrimaryAddress { get; set; }
public virtual ICollection<CustomerAddress> CustomerAddresses { get; set; }
}
地址:
public class CustomerAddress : Address
{
public int CustomerAddressId { get; set; }
public int CustomerId { get; set; }
public virtual Customer Customer { get; set; }
}
我的这个映射部分正常工作,它在客户地址上。
this.HasRequired(c => c.Customer)
.WithMany(d => d.CustomerAddresses)
.HasForeignKey(c => c.CustomerId);
但是我应该如何为设置客户的PrimaryAddress指定正确的映射呢?或者这种方法是错误的吗?
谢谢。
编辑 - 使用Arnold和LueTM的答案:
这段代码现在可以正常工作了。
客户:
public class Customer
{
public int CustomerId { get; set;}
public String CustomerName { get; set; }
// public int PrimaryAddressId { get; set; } created in mapping
public virtual CustomerAddress PrimaryAddress { get; set; }
public virtual ICollection<CustomerAddress> CustomerAddresses { get; set; }
}
地址:
public class CustomerAddress : Address
{
public int CustomerAddressId { get; set; }
public int CustomerId { get; set; }
public virtual Customer Customer { get; set; }
}
客户映射:
modelBuilder.Entity<Customer>
.HasOptional(c => c.PrimaryAddress)
.WithOptionalDependent().Map(m => m.MapKey("PrimaryAddressId"));
modelBuilder.Entity<Customer>
.HasMany(c => c.CustomerAddresses)
.WithRequired(c => c.Customer)
.HasForeignKey(c => c.CustomerId)
.WillCascadeOnDelete(false);
我使用一个代码库来确保先创建一个新的地址,保存后再将其设置为主要地址并再次保存。这个代码库可以确保主要地址是“必需”的。