use*_*833 2 code-first entity-framework-4 ef4-code-only ef-code-first
我首先使用EF4代码,并希望生成一个由类属性和外键组成的复合键.我有两个班:订单和公司.Order类包含引用,但这在公司之间不一定是唯一的.所以我打算使用由Reference和Company.CompanyId组成的复合键.
我已尝试使用以下设置它但我收到错误消息"键表达式无效".
modelBuilder.Entity<Order>().HasKey(o => new { o.Reference, o.Company.CompanyId });
Run Code Online (Sandbox Code Playgroud)
我也试过了
modelBuilder.Entity<Order>().HasKey(o => new { o.Reference, o.Company });
Run Code Online (Sandbox Code Playgroud)
这失败了.
这些是我的课程:
public class Order
{
public string Reference { get; set; }
public Company Company { get; set; }
}
public class Company
{
public int CompanyId { get; set; }
public virtual ICollection Orders { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
正如Antony Highsky所提到的,你只能在键中使用标量属性.因此,您需要将一个外键(标量属性)添加到Order类,并将其与导航属性Company关联,如下所示:
public class Order
{
public string Reference { get; set; }
public int CompanyId { get; set; }
[RelatedTo(ForeignKey = "CompanyId")]
public Company Company { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后使用模型构建器创建组合键:
modelBuilder.Entity<Order>().HasKey(o => new { o.Reference, o.CompanyId });
Run Code Online (Sandbox Code Playgroud)
请注意,数据注释(RelatedTo属性)是随Entity Framework CTP 3引入的.对于另一个仅使用数据注释而不是HasKey方法的选项,请参阅以下文章:
| 归档时间: |
|
| 查看次数: |
5115 次 |
| 最近记录: |