我有两个类,每个类都有一个主键(在DB中也经过验证 - 只有一个键,只有一个列是PK)。
public class Sub1
{
[Key]public int Id {get; set;}
[Required]public int Value {get; set;}
}
public class Sub2
{
[Key]public int Id {get; set;}
[Required]public int Value {get; set;}
}
然后我添加第三个类,它使用上面两个中的Id列作为外键。
public class Sup
{
[Key]public int Id { get; set; }
[ForeignKey(Sub1)]public int Sub1Id { get; set; }
[ForeignKey(Sub2)]public int Sub2Id { get; set; }
public virtual Sub1 { get; set; }
public virtual Sub2 { get; set; }
}
当我尝试运行 Add-Migration 时,我收到以下错误。没有复合主键,也没有多个主键。当我添加 Column 属性时,它可以工作,但我觉得它不应该是必要的(因此,我怀疑我做错了什么)。
无法在Beep.Bapp.Thing类型上确定外键的复合外键排序。在复合外键属性上使用ForeignKey数据注释时,请确保使用Column data annotation或Fluent API指定顺序。
在this answer中,有类和这里,我得到了htat,我们需要添加列订购信息。
public class Category
{
[Key, Column(Order = 0)]
public int CategoryId2 { get; set; }
[Key, Column(Order = 1)]
public int CategoryId3 { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
public class Product
{
[Key]
public int ProductId { get; set; }
public string Name { get; set; }
[ForeignKey("Category"), Column(Order = 0)]
public int CategoryId2 { get; set; }
[ForeignKey("Category"), Column(Order = 1)]
public int CategoryId3 { get; set; }
public virtual Category Category { get; set; }
}
答案 0 :(得分:0)
我根本不知道您的代码是如何编译的。试试这个型号:
public class Sub1
{
[Key]
public int Id {get; set;}
[Required]
public int Value {get; set;}
}
public class Sub2
{
[Key]
public int Id {get; set;}
[Required]
public int Value {get; set;}
}
public class Sup
{
[Key]
public int Id { get; set; }
public int Sub1Id { get; set; }
public int Sub2Id { get; set; }
public virtual Sub1 Sub1 { get; set; }
public virtual Sub2 Sub2 { get; set; }
}