C# 首先使用EF代码在同一个表上定义复合键和标识
以下面的C代码为例。我正在尝试创建C# 首先使用EF代码在同一个表上定义复合键和标识,c#,entity-framework,ef-code-first,code-first,C#,Entity Framework,Ef Code First,Code First,以下面的C代码为例。我正在尝试创建ClassC,它有一个复合键,但也在其中创建一个标识,可以用作另一个表ClassD中的外键。我宁愿使用这个外键,而不是尝试映射似乎有点奇怪的复合键 public class ClassA { [Key] public int ClassAID { get; set; } public virtual ICollection<ClassC> SomeClassCs { get; set; } } public class Cl
ClassC
,它有一个复合键,但也在其中创建一个标识,可以用作另一个表ClassD
中的外键。我宁愿使用这个外键,而不是尝试映射似乎有点奇怪的复合键
public class ClassA
{
[Key]
public int ClassAID { get; set; }
public virtual ICollection<ClassC> SomeClassCs { get; set; }
}
public class ClassB
{
[Key]
public int ClassBID { get; set; }
public virtual ICollection<ClassC> SomeClassCs { get; set; }
}
public class ClassC
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ClassCID { get; set; }
[Key, Column(Order=0), ForeignKey("SomeA")]
public int ClassAID { get; set; } //Foreign Keys combined as Primary Key
[Key, Column(Order=1), ForeignKey("SomeB")]
public int ClassBID { get; set; }
public virtual ClassA SomeA { get; set; }
public virtual ClassB SomeB { get; set; }
}
public class ClassD
{
[Key]
public int ClassDID { get; set; }
[ForeignKey("SomeC")]
public int ClassCID { get; set; }
public virtual ClassC SomeC { get; set; }
}
公共类ClassA
{
[关键]
公共int类援助{get;set;}
公共虚拟ICollection SomeClassCs{get;set;}
}
公共B类
{
[关键]
公共int类bid{get;set;}
公共虚拟ICollection SomeClassCs{get;set;}
}
公共类C类
{
[数据库生成(DatabaseGeneratedOption.Identity)]
公共int类cid{get;set;}
[Key,Column(Order=0),ForeignKey(“SomeA”)]
public int ClassAID{get;set;}//组合为主键的外键
[Key,Column(Order=1),ForeignKey(“SomeB”)]
公共int类bid{get;set;}
公共虚拟类a SomeA{get;set;}
公共虚拟类B SomeB{get;set;}
}
公共类D
{
[关键]
public int ClassDID{get;set;}
[外键(“SomeC”)]
公共int类cid{get;set;}
公共虚拟类c SomeC{get;set;}
}
创建迁移时,我收到以下错误:
System.Data.Entity.Edm.EdmAssociationConstraint::的数量
关系中从属角色和主要角色中的属性
约束必须相同
有人解决了这个问题,或者我处理得不正确吗?从属实体的外键应该包含主体的所有主键。您可以在上阅读有关外键约束的更多信息 在
ClassC
上有两个主键,因此,对于此关系,在ClassD
上应该有两个外键。或者,您可以将ClassCID
设置为单个主键,然后您对ClassD
外键的映射将起作用。在任何情况下-依赖表的外键都应该和主体表中的主键完全相同
“我宁愿使用此外键,也不愿尝试映射合成
看起来有点奇怪的钥匙“
你说的是vs
我就是这么做的: