2017-08-11 8 views
0

従業員を連絡先情報にリンクするEmployeeテーブルがあります。私はそれはそうのような設定があります。私は、データベースから従業員をロードしようとするとEntity Frameworkのコードの最初の列/キーの名前の変更

[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の各オブジェクトのナビゲーションプロパティを従業員にリンクしたものと関係しているようです。私は今のところそれらを必要としないので、それらのナビゲーションプロパティを削除することで問題が修正されました。あなたの従業員を設定

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; } 
} 

を、関係あなたのPhoneNumberを設定@peinearydevelopment上の拡張として

0

は保持されますが、アプリケーションに識別子、nを保持するフィールドを明示的に伝える必要がありますどのテーブルにも関係があります。

関連する問題