实体框架代码首先使用Fluent Mapping为不同的表和实体的不同列键名称

时间:2013-03-11 03:29:59

标签: entity-framework

首先在现有数据库中使用代码。我有2个表具有不同的主键和外键名称。例如

public class Person
{
    public int PersonID {get; set;}
    public virtual Sale {get; set;}
    public ICollection<Order> Orders {get; set;}
   //props
}

public class Sale
{
    public int saleId {get; set;}
    public int PersID {get; set;}
    //props
}
public class Oder
{
   public int OrderId {get; set;}
   public int pID {get set;}
}

假设表Person中的PK是PersonID,Order中的PID和Sale PersID中的FK(因此ID的命名约定因表而异)

如何在考虑不同的列ID名称的情况下使用流畅地映射实体?

1 个答案:

答案 0 :(得分:1)

因此,EF已经将PersonID作为您的人员(人员?)表的主键。当然,你总是可以写:

modelBuilder.Entity<Person>().HasKey(p => p.PersonID);

然后你要描述人与销售之间的关系。我将假设您的Sale类具有类型为Person的导航属性,名为“Person”:

modelBuilder.Entity<Sale>().HasRequired(s => s.Person)
                           .WithMany()
                           .HasForeignKey(s => s.PersID);

“HasForeignKey”方法允许您在类上指定定义外键值的属性。

不要忘记,完全省略外键属性也是可以的。您可能想要抛弃PersID属性并告诉EF数据库列被称为“PersID”,如下所示:

modelBuilder.Entity<Sale>().HasRequired(s => s.Person)
                           .WithMany()
                           .Map(m => m.MapKey("PersID"));