流畅的API - 一对多 - 多重关系

时间:2014-10-08 22:44:30

标签: c# entity-framework frameworks entity fluent

您好我有一个以下问题,我正在尝试使用Fluent API解决。

我有两张桌子:

产品: ID int |代码nvarchar(20)| CurrentDetailsID int

ProductDetails ID int | ProductID int |名字navrachar(50)....

现在我的关系有点奇怪,因为: 产品只能包含一个当前产品详细信息(CurrentDetailsID),​​每个详细信息记录只能链接到一个产品,但产品本身也可以包含多个详细信息(出于历史原因)。

知道如何在流畅的API中存档这种棘手的关系类型吗?

的Seb

1 个答案:

答案 0 :(得分:0)

按以下方式定义您的课程:

public class Product
{
    public int Id { get; set; }
    public string Code { get; set; }
    public int CurrentProductDetailId { get; set; } 
    public virtual ProductDetail CurrentProductDetail { get; set; }
    public virtual ICollection<ProductDetail> ProductDetails { get; set; }
}
public class ProductDetail
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int ProductId { get; set; }
    public virtual Product Product { get; set; }
}

如果您想使用Fluent API,可以使用以下代码

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
   modelBuilder.Entity<Product>()
               .HasMany(t => t.ProductDetails)
               .WithRequired(t=>t.Product)
               .HasForeignKey(t => t.ProductId);
   modelBuilder.Entity<Product>()
               .HasRequired(t => t.CurrentProductDetail)
               .WithRequiredPrincipal()
               .Map(m => m.MapKey("CurrentProductDetailId"));
}

这就是结果:

enter image description here