2017-08-11 122 views
0

我有一個Employee表,它將員工鏈接到他們的聯繫信息。我有它設置就像這樣:實體框架代碼首先重命名列/鍵

[ForeignKey("AddressId")] 
    public virtual Address Address { get; set; } 

    [ForeignKey("HomePhoneId")] 
    public virtual PhoneNumber HomePhone { get; set; } 

    [ForeignKey("WorkPhoneId")] 
    public virtual PhoneNumber WorkPhone { get; set; } 

    [ForeignKey("CellPhoneId")] 
    public virtual PhoneNumber CellPhone { get; set; } 

當我嘗試從數據庫中加載的員工,但是,它會自動重命名列,完全重寫屬性:

Invalid column name 'PhoneNumber_Id'. 

Invalid column name 'PhoneNumber_Id1'. 

Invalid column name 'PhoneNumber_Id2'. 

Invalid column name 'Address_Id'. 

爲什麼這樣做?

+2

你的員工模型的其餘部分是什麼樣的?你有外鍵id的屬性嗎? AddressId,HomePhoneId等? – mcbowes

回答

2

如前所述通過@mcbowes,很難說沒有看到你的Employee類的其餘部分,但最有可能你缺少你的類中的下列:

public int AddressId { get; set; } 

public int HomePhoneId { get; set; } 

public int WorkPhoneId { get; set; } 

public int CellPhoneId { get; set; } 
0

這些ID都正確指定每個導航屬性。似乎問題與鏈接回員工的每個PhoneNumberAddress對象上的導航屬性有關。我現在不需要它們,因此刪除這些導航屬性可以糾正問題。

0

上@peinearydevelopment擴展設置您的電話號碼:

public class PhoneNumber 
{ 
    public PhoneNumber(string name, int areaCode, string number) 
    { 
     Name = name; 
     AreaCode = areaCode; 
     Number = number; 
    } 

    public int ID { get; set; } 
    public string Name { get; set; } 
    public int AreaCode { get; set; } 
    public string Number { get; set; } 
} 
} 

設置你的員工:

public class Person 
{ 
    public Person(string first, string last, PhoneNumber home, PhoneNumber cell) 
    { 
     First = first; 
     Last = last; 
     HomeNumber = home; 
     CellNumber = cell; 
    } 

    public int ID { get; set; } 

    public string First { get; set; } 

    public string Last { get; set; } 
    public int HomePhone_ID { get; set; } 
    public int CellNumber_ID { get; set; } 

    public virtual PhoneNumber HomeNumber { get; set; } 
    public virtual PhoneNumber CellNumber { get; set; } 
} 
} 

而且您的上下文

public class PersonContext : DbContext 
{ 
    public DbSet<Person> People { get; set; } 
    public DbSet<PhoneNumber> PhoneNumbers { get; set; } 
} 

正如你所看到的,關係被保留,但你確實需要明確地告訴你的應用程序哪些字段包含標識符,n不只是哪些表具有關係。