【发布时间】:2012-11-29 21:20:48
【问题描述】:
我有一个包含三个结构如下表的数据库:
Table 1: Product
Columns: ProductID, PK
SKU, PK
Name
Table 2: ProductImages
Columns: ImageID PK
SKU
Table 3: Images
Columns: ImageID PK
ImageContent
暂时忽略表 ProductImages 看起来是多对多关系,除了唯一 PK 约束强制为一对一,因此是不必要的一对多对-一张表(它是一个现有的数据库)。
我想要以下POCO实体类:
public class Product
{
public int ProductId { get; set; }
public string SKU { get; set; }
public virtual Image Image { get; set; }
}
假设Image 也是我的实体模型中的一个实体。
我使用Entity Framework 5.0 和代码优先和Fluent API,我正在发疯试图弄清楚如何编写ProductMap 类(派生自EntityTypeConfiguration<Product>)。特别是关系映射。
呈现的 SQL 应该类似于以下实体框架的版本:
select p.SKU, p.Name, p.ProductID, I.ImageID, I.ImageContent
from Products p
inner join ProductImages si on p.SKU = si.SKU
inner join Images i on i.ImageId = si.ImageId
任何人可以提供的任何帮助都会得到衷心的感谢。
【问题讨论】:
-
SKU 不应该是 ProductImages 的主键吗?如果是这种情况,那么您似乎需要一组产品图像,其中包含一组图像,包含在您的产品类中。
-
除非您愿意通过告诉 EF Product 只有 SKU 作为主键来欺骗 EF,否则您不会这样做。 (多对多映射是可能的)。但这可能会导致异常,因为实际上 SKU 在 Product 中可能不是唯一的。
标签: entity-framework entity-framework-5 fluent-interface