【发布时间】:2014-06-18 22:09:58
【问题描述】:
我正在尝试创建三个实体:产品、属性、产品属性。
public class Product
{
public Guid Id { get; set; }
public virtual List<ProductAttributes> Attributes { get; set; }
// product detail properties
}
public class Attribute
{
public Guid Id { get; set; }
// attribute detail properties
}
public class ProductAttribute
{
[Key, Column(Order = 0)]
public Guid ProductId { get; set; }
[Key, Column(Order = 1)]
public Guid AttributeId { get; set; }
public double Value { get; set; }
public virtual Product Product { get; set; }
public virtual Attribute Attribute { get; set; }
}
ProductAttributes 本质上是产品和属性之间的连接表,并保存该属性的值数据。产品可以具有任意数量的不同属性,只要它具有价值即可。 Products 中的导航属性List<ProductAttributes> 对于更新产品的属性值至关重要,但我似乎无法正确配置关系。
这是我的modelbuilder 代码:
// Products
ToTable("Products", schema)
.HasMany( x => x.Attributes)
.WithRequired()
.HasForeignKey(x => x.ProductId)
.WillCascadeOnDelete(true);
// Attributes
ToTable("Attributes", schema);
// ProductAttributes
ToTable("ProductAttributes", schema)
.HasKey(x => new { x.ProductId, x.AttributeId });
我在上面尝试过这种设置,仅使用 Fluent API,仅使用属性,并且除了复合主键 ProductId 和AttributeId ProductAttributes 表上的外键。我也尝试为表创建一个虚拟主键,但导航属性仍然不会加载 ProductAttributes。
有没有一种方法可以配置只有一个实体具有复合键的多对必需关系?
【问题讨论】:
标签: c# entity-framework ef-code-first asp.net-mvc-5 composite-primary-key