实体框架使用外键作为唯一主键在一对多中
问题描述:
我首先使用实体框架代码来设计数据库。实体框架使用外键作为唯一主键在一对多中
我有2个模型与一对多的关系。一个“富”可以有很多“FooData”如下 -
public class Foo {
[Key]
public string serialNumber{get; set;}
public int someNumber {get; set;}
public string someName {get; set;}
// Many more properties
// Navigation Collection
public virtual ICollection<FooData> FooDatas{get; set;}
}
public class FooData{
[Key]
[ForeignKey("foo")]
public string SerialNum {get; set;}
public DateTime SomeTime {get; set;}
public byte[] SomeData {get; set;}
// Navigation property
public virtual Foo foo {get; set;}
}
当我尝试添加控制器“富”在MVC中,使用“富”作为一个脚手架模型,它给了我这个错误 - “多重性在角色中是无效的,因为从属角色指的是关键属性,所以从属角色的多重性的上限必须是1“。
我将不胜感激这里的一些帮助。
谢谢
答
因为你是如何定义它相同的密钥在两个使用所以它是一个1比1的关系。如果你想要一对多的实体,你将需要添加/创建另一个字段,并将它们设置为FooData表/实体上的组合键。
public class Foo {
[Key]
public string serialNumber{get; set;}
public virtual ICollection<FooData> FooDatas{get; set;}
}
public class FooData {
[Key, Column(Order = 0),ForeignKey("foo")]
public string SerialNum {get; set;}
[Key,Column(Order=1)]
public int DataId {get;set;}
public virtual Foo foo {get; set;}
}
+0
是的。这正是我所做的。谢谢。 – Akshada
如果'FooData.SerialNum'是其'FooData'的主键,并且在'Foo'一个外键,则类之间的关系不能是1-许多,它仅限于1- 0:1,因为使它成为唯一的“钥匙”。尝试从'FooData.SerialNum'中删除'Key'。 –
如果我从FooData中删除[key],那么错误说“FooData”没有定义键。 – Akshada
您可能需要为详细信息表创建代理标识密钥字段。 –