繁体   English   中英

在实体框架中将多个外键设置为主键

[英]set multiple foreign keys as primary keys in entity framework

我正在使用实体框架来管理我的sql-server-ce数据库。 我希望我的表的主键由其他表的几个外键组成。 我期待这样的事情发挥作用:

class Bill{
    [Key]
    public virtual Customer Customer { get; set; }
    [Key]
    public virtual Era Era { get; set; }
    [Key]
    public virtual CompanyCode CompanyCode { get; set; }
    public long? Amount { get; set; }
}

但它导致以下数据库迁移错误:

BillPrinter.Bill :: EntityType'Bill'没有定义键。 定义此EntityType的键。 Bills:EntityType:EntitySet'Bills'基于类型'Bill',没有定义键。

如何让我的表有一个主键由这三个外键组成?

您不能将导航属性用作PK。 导航属性提供了一种导航两种实体类型之间关联的方法,但它们本身并不代表关系的FK。 您需要明确声明三个附加属性来表示关系的FK,如此模型中所示:

public class Customer
{
  public int Id {get;set;}
  //...
}

public class Era 
{
  public int Id {get;set;}
  //...
}

public class CompanyCode 
{
  public int Id {get;set;}
  //...
}


public class Bill
{
  [Key] 
  [Column(Order=1)] 
  [ForeignKey("Customer")]
  public int CustomerId {get;set;}

  [Key] 
  [Column(Order=2)] 
  [ForeignKey("Era")]
  public int EraId {get;set;}


  [Key] 
  [Column(Order=3)] 
  [ForeignKey("CompanyCode")]
  public int CompanyCodeId {get;set;}
  //...
  public virtual Customer Customer { get; set; }
  public virtual Era Era { get; set; }
  public virtual CompanyCode CompanyCode { get; set; }
}

如您所见,当您有复合键时, Entity Framework要求您定义键属性的顺序 您可以使用Column批注指定订单。 此外,您需要使用ForeignKey数据注释来阐明您的意图,哪个导航属性表示它是外键的关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM