实体框架,组合键不会被创建

本文关键字:创建 框架 组合 实体 | 更新日期: 2023-09-27 18:09:41

我有以下类:

public class GoodsIssueProcess
{
    [Key, Column(Order = 1), MaxLength(128)]
    public string DeliveryNote { get; set; }
    [Key, Column(Order = 2)]
    public Product Product { get; set; }
}
public class Product
{
    // the unique ID of the product
    [Key]
    public int Id { get; set; }
    [Required, MaxLength(36)]
    [Index("IX_ArticleNumber", 1, IsUnique = true)]
    public string ArticleNumber { get; set; }
}

(为便于阅读而缩写)

如您所见,GoodsIssueProcess由Product和交付票据代码(基本上只是一个数字)组成。根据"Key"关键字的规范,我希望得到ProductId和DeliveryNote的复合主键。然而,我得到的是DeliveryNote的普通主键。Product列甚至获得了Nullable属性和到Product表的外键关系(这很好)。

你知道我做错了什么吗?我还尝试分配以下内容:
[Key, Column(Order = 2), ForeignKey("Product")]
public int ProductId { get; set; }
public virtual Product Product { get; set; }

结果是相同的数据库布局(只有一个主键,没有组合键)。我正在EF 6.0和MSSQL Server 2012上工作。

编辑:停!-显然版本#2工作(一个公共int ProductId)。然而,第一个版本不也应该工作吗?

实体框架,组合键不会被创建

组合键的关键部分应该是SQL中可以转换为基本类型的类型,Product类型不能转换为基本类型,而ProductId类型可以转换为SQL中的int
组合键必须为:

public class GoodsIssueProcess
{
    [Key, Column(Order = 1), MaxLength(128)]
    public string DeliveryNote { get; set; }
    [Key, Column(Order = 2)]
    public int ProductId { get; set; }
}