2016-07-05 80 views
1

我首先使用实体​​框架代码来设计数据库。实体框架使用外键作为唯一主键在一对多中

我有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“。

我将不胜感激这里的一些帮助。

谢谢

+0

如果'FooData.SerialNum'是其'FooData'的主键,并且在'Foo'一个外键,则类之间的关系不能是1-许多,它仅限于1- 0:1,因为使它成为唯一的“钥匙”。尝试从'FooData.SerialNum'中删除'Key'。 –

+0

如果我从FooData中删除[key],那么错误说“FooData”没有定义键。 – Akshada

+0

您可能需要为详细信息表创建代理标识密钥字段。 –

回答

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