2015-12-16 56 views
0

如何首先使用EF 6代碼添加第二個表關聯?我有一個用於註冊計算機的簡單數據庫。部分代碼是:第二個表與第一個代碼的關聯

public class Person { 
    public virtual int Id { get; set; } 
    public virtual string FirstName { get; set; } 
    ... 
    public virtual ICollection<Computer> Computers { get; set; } 
} 
public class Computer { 
    public virtual int Id{ get; set; } 
    public virtual string Hostname { get; set; } 
    ... 
} 

更新數據庫在計算機中使用PersonId列生成預期的表。然後,軟件需求會發生變化(相信?),除了每臺計算機的所有者外,我還需要主要聯繫人。所以我更新的電腦到:

public class Computer { 
    public virtual int Id{ get; set; } 
    public virtual string Hostname { get; set; } 
    ... 
    public virtual Person Contact { get; set; } 
} 

然後運行添加的遷移,並得到如下:

public override void Up() { 
    RenameColumn(table: "dbo.Computers", name: "Person_Id", newName: "Contact_Id"); 
    RenameIndex(table: "dbo.Computers", name: "IX_Person_Id", newName: "IX_Contact_Id"); 
} 

它劫持我的主人領域的接觸!我仍然需要這個。

我確定正確的答案是RTM,但M是巨大的,這是一個簡單的項目,不允許時間。如果任何人有一個簡單的答案讓我通過這個障礙或有一個鏈接到正確的部分文件解釋這一點,我會很感激。謝謝!

回答

1

嘗試這樣:

public class Computer 
{ 
    public virtual int Id{ get; set; } 
    public virtual string Hostname { get; set; } 
    ... 
    public int OwnerId {get;set} 
    public int? ContactId {get;set;} 
    [ForeignKey("OwnerId")] 
    public virtual Person Owner{ get; set; } 
    [ForeignKey("ContactId")] 
    public virtual Person Contact { get; set; } 
} 

但我不是100%肯定它就會正確地理解ICollection的。但至少你可以試試。

更新:我剛剛測試過它,對我來說似乎沒問題。對於你的情況,你可以避免使用'OwnerId'併爲聯繫人添加新的外鍵。

+0

你是對的!我確實必須從人員中刪除ICollection,這意味着我必須更新代碼,因此總體上它不是一個乾淨的遷移,但我不再被卡住。謝謝! – bob

相關問題