2016-07-05 83 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