2012-11-07 46 views
2

我有2個類,一個是其他像下面的集合屬性。修改多對多表創建者EF5代碼優先

public class NotificationMessage 
{ 
    public int ID { get; set; } 
    public string Message { get; set; } 
    public virtual ICollection<Device> Devices { get; set; } 
} 

public class Device 
{ 
    public int ID { get; set; } 
    public string Token { get; set; } 
    public virtual ICollection<NotificationMessage> NotificationMessages { get; set; } 
} 

public class NotificationMessageDevice 
{ 
    [Column(Order = 0), Key, ForeignKey("NotificationMessage")] 
    public int NotificationMessageID { get; set; } 

    [Column(Order = 1), Key, ForeignKey("Device")] 
    public int DeviceID { get; set; } 


    public virtual Device Device { get; set; } 
    public virtual NotificationMessage NotificationMessage { get; set; } 
} 

當你創建一個類似上述的關係,實體flamework非常聰明,通過創建NotificationMessageDevices創造出許多對數據庫的一對多的關係。

問題在這裏上升。現在我想將CreateDate添加到表'NotificationMessageDevices'中。我所做的是,我以實體框架在現有數據庫中創建表「NotificationMessageDevices」的方式創建了一個名爲'NotificationMessageDevice'的新類。我添加了新的屬性並稱爲Update-Verbose。第一個例外是關於缺少ID屬性,它希望我添加public int ID {get; set;}但是,當我添加它時,它意識到ID屬性是index屬性,因此我需要刪除該表中的所有數據。

這是什麼情況下,對實體框架的無數據丟失:)

+0

您是否嘗試使用代碼優先遷移? – Richard

+0

實際上不是遷移。我從頭開始用代碼優先創建了我的數據庫。但是我意識到,對於多對多關係,EF會創建一個新表來保存數據。現在我想將另一列添加到該鏈接器表中。 – kkocabiyik

+0

不管你是在更改數據庫,你將不得不做某種遷移,但爲了繞過ID屬性,在鏈接器表中創建一個複合鍵。即分別將屬性[Key,Column(Order = 1)]和[Key,Column(Order = 2)]添加到鏈接器表的ID屬性中。 – user1793607

回答

1

的解決方法,您可以創建這樣的鏈接實體:

public class DeviceNotificationMessages 
{ 
    public DeviceNotificationMessages() 
    { 
     CreateDate = DateTimeOffset.Now; 
    } 

    [Column(Order = 0), Key, ForeignKey("NotificationMessage")] 
    public int NotificationMessageId { get; set; } 
    public virtual NotificationMessage NotificationMessage { get; set; } 
    [Column(Order = 1), Key, ForeignKey("Device")] 
    public int DeviceID { get; set; } 
    public virtual Device Device { get; set; } 

    public DateTimeOffset CreateDate { get; set; } 
} 

那麼你需要處理遷移到這新的實體以避免數據丟失。如果您使用的是代碼優先遷移,則需要添加手動遷移(自動遷移將導致數據丟失),然後編輯腳本以避免刪除數據。

+0

當我這樣做時發生了幾個錯誤\ tSystem.Data.Entity.Edm.EdmEntityType :: EntityType'NotificationMessageDevice'沒有定義鍵。定義此EntityType的關鍵字。 \ tSystem.Data.Entity.Edm.EdmEntitySet:EntityType:EntitySet'NotificationMessageDevices'基於沒有定義鍵的類型'NotificationMessageDevice'。 – kkocabiyik

+0

它現在給出以下錯誤CREATE UNIQUE INDEX語句終止,因爲找到了對象名稱'dbo.NotificationMessageDevices'和索引名稱'PK_dbo.NotificationMessageDevices'的重複鍵。重複的鍵值是(0,0)。 – kkocabiyik

+0

請在您的原始問題中發佈您用於NotificationMessageDevices的代碼。 – Richard

相關問題