2013-03-11 78 views
2

先在现有数据库中使用代码。我有两个表具有不同的主键和外键名称。例如实体框架代码首先将Fluent映射用于不同表格和实体的不同列键名称

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

假设表人的PK是是PersonID,为了是PID和FK在售PersID(所以对ID的命名规则是从桌到桌不同)

我如何在考虑不同的列ID名称的同时使用流利来映射实体?

回答

1

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

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

然后你想描述Person和Sale之间的关系。我会假设你Sale类有所谓的“人” 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")); 
+0

谢谢Matt。其实没有从销售到人的导航财产。但只是从人到销售。那么映射将如何改变? – 2013-03-11 13:22:42

+0

@Amadou我不知道如何定义关系,如果你没有导航属性。这不是我见过的。 – 2013-03-11 19:27:35

+0

我明白马特。谢谢 – 2013-03-18 16:37:12

相关问题