具有Object类型的Entity Framework复合主键

时间:2014-10-15 01:53:47

标签: c# entity-framework ef-code-first composite-primary-key

我首先使用Entity框架代码,我想从我的代码生成DB,如下所示: 我有2个实体类,例如:

Product {
public int id;
public int name;
}

Month{
public int year;
public int month;
}

现在我要创建一个“报告”课程

Report{
public Product product;
public Month month;
public decimal Price;
}

我尝试在DbContext

中添加复合主键
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
     modelBuilder.Entity<Report>().HasKey(t => new { t.Product.ID, t.Month.ID });
}

但EF告诉'报告'必须有来自原始类型的主键(例如int,char ...) 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您需要将复合键添加到Report类中。您还需要Month类的标识符。以下语法可能不是100%。

public class Report
{
   [Key(Order=0)]
   public int ProductId { get; set; }

   [Key(Order=1)]
   public int MonthId { get; set; }

   public Product product { get; set; }

   public Month month { get; set; }

   public decimal Price { get; set; }
}