2014-01-24 20 views
0

你好我有數據庫中的表只包含外鍵。該表結構如下圖所示:由VS數據庫中生成的第一在沒有主鍵的表上插入動作

代碼:

public partial class DeviceUsage 
    { 
    public int StorageId { get; set; } 
    public int UserId { get; set; } 
    public int DeviceInstanceId { get; set; } 

    public virtual DeviceInstance DeviceInstance { get; set; } 
    public virtual Storage Storage { get; set; } 
    public virtual User User { get; set; } 
} 

,你可以看到所有的鍵與其他3個表國外。

我知道,EntityFramework不喜歡沒有主鍵的表。

但即使如此,我需要問你是否有任何可能使其工作,或者我被迫添加新的列ID到我的表?

+0

主鍵可能是也已經存在的列的連接(如果這三個值合在一起是唯一的) – Steve

+0

所有三個FK都是它們列中的主鍵(帶有標識),因此它們是唯一的 – szpic

+0

難道你不能讓這三個值把你的PK放在桌子上,並用它來完成? –

回答

2

您必須設置主鍵。您不需要額外添加Id列,可以使用[Key]屬性將其中一個屬性設置爲主鍵。例如:

[Key] 
public int StorageId { get; set; } 
0

我認爲插入不可能沒有主鍵。 只需添加

[Require] 
public int DeviceUsageId {get;set} 

放話,你不必使用這種PK

+0

它是數據庫的第一個模型,所以你不能在類代碼中看到它,但所有的屬性都是[必需] – szpic

+0

我不確定,但你可以嘗試使用流利的api來定義主鍵: HasKey(d => new { d.StorageId,d.UserId,d.DeviceInstanceId}); – Krahu

0

看着這篇文章Entity Framework and Code First Data Annotations看來,你的答案是

public partial class DeviceUsage 
{ 
    [Key] 
    [Column(Order=1)] 
    public int StorageId { get; set; } 
    [Key] 
    [Column(Order=2)] 
    public int UserId { get; set; } 
    [Key] 
    [Column(Order=3)] 
    public int DeviceInstanceId { get; set; } 

    public virtual DeviceInstance DeviceInstance { get; set; } 
    public virtual Storage Storage { get; set; } 
    public virtual User User { get; set; } 
} 
+0

感謝您的回答,但我忘了提及我使用數據庫第一個模型,所以我不應該使用數據註釋 – szpic