Entity framework 4 如何创建一个组合键,该组合键首先包含一个带代码的外键?
我首先使用EF4代码,希望生成一个由类属性和外键组成的复合键。我有两门课:订单和公司。Order类包含一个引用,但这在公司之间不一定是唯一的。因此,我打算使用由Reference和Company.CompanyId组成的复合键 我已尝试使用以下方法进行设置,但收到错误消息“密钥表达式无效”Entity framework 4 如何创建一个组合键,该组合键首先包含一个带代码的外键?,entity-framework-4,code-first,ef4-code-only,ef-code-first,Entity Framework 4,Code First,Ef4 Code Only,Ef Code First,我首先使用EF4代码,希望生成一个由类属性和外键组成的复合键。我有两门课:订单和公司。Order类包含一个引用,但这在公司之间不一定是唯一的。因此,我打算使用由Reference和Company.CompanyId组成的复合键 我已尝试使用以下方法进行设置,但收到错误消息“密钥表达式无效” 任何帮助都将不胜感激。有一件事情看起来不太正确,那就是您使用了非通用版本的ICollection。试试这个: public virtual ICollection<Order> Orders {
任何帮助都将不胜感激。有一件事情看起来不太正确,那就是您使用了非通用版本的ICollection。试试这个:
public virtual ICollection<Order> Orders { get; set; }
公共虚拟ICollection订单{get;set;}
你试过这个吗
modelBuilder.Entity().HasKey(o=>o.Reference);
modelBuilder.Entity().HasKey(o=>o.CompanyId) 根据,键中只允许标量属性。导航属性不可用。正如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; }
}
然后使用模型生成器创建复合关键点:
modelBuilder.Entity<Order>().HasKey(o => new { o.Reference, o.CompanyId });
modelBuilder.Entity().HasKey(o=>new{o.Reference,o.CompanyId});
注意,数据注释(RelatedTo属性)是在实体框架CTP3中引入的。有关仅使用数据注释而不是HasKey方法的另一个选项,请参阅本文:
public virtual ICollection<Order> Orders { get; set; }
public class Order
{
public string Reference { get; set; }
public int CompanyId { get; set; }
[RelatedTo(ForeignKey = "CompanyId")]
public Company Company { get; set; }
}
modelBuilder.Entity<Order>().HasKey(o => new { o.Reference, o.CompanyId });