2017-08-11 89 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不只是哪些表具有关系。

相关问题