2017-10-19 75 views
-1

我正在使用EF6访问一组三个表“TableA”,“TableB”和“TableC” TableA与TableB和TableC有多对多的关系,所以有两个表创建TableAableB & TableAableC。这些表格各有两列, TableA_Id和TableB_Id或TableA_Id和TableC_Id。这有效,但现在DBA希望我从这些列中删除下划线字符。使用EF6代码优先不迁移到现有的数据库如何指定多对多连接表的列名?

虽然原始表格是通过迁移创建的,但我已经从项目中删除了迁移方面。我已将实际连接表中的列重命名,但我如何将关系返回到TableA来工作?是否可以通过数据注释或流利?

表A:

public class TableA 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public virtual ICollection<TableB> TableBs { get; set; } 
    public virtual ICollection<TableC> TableCs { get; set; } 
} 

表B:

public class TableB 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<TableA> TableAs { get; set; } 
} 

表C:

public class TableC 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<TableA> TableAs { get; set; } 
} 

这是不同的,那么前面的问题,因为它指定表已经建立的连接,并具有特定的列名称。问题是如何获得现有的代码来映​​射到正确的列名称

名称。

回答

2

我会流利的,你可以提到如下键。 为了更好的理解,波纹管和课程学生的例子

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 

    modelBuilder.Entity<Student>() 
       .HasMany<Course>(s => s.Courses) 
       .WithMany(c => c.Students) 
       .Map(cs => 
         { 
          cs.MapLeftKey("StudentId"); 
          cs.MapRightKey("CourseId"); 
          cs.ToTable("StudentCourse"); // this is mappingtable 
         }); 

} 

上面的例子是最好的Blog可以说博客中清楚地说明多对多的关系

+0

这仍然说明这里给我一个无效的列名(旧列名包含下划线) –

+0

愚蠢的错误...我正在构建一个发布版本和测试调试版本,所以调试版本没有看到我的代码的任何更改。 –

相关问题