2013-12-22 111 views
0

我正试图在现有数据库上创建模型。实体框架代码优先映射问题

目前,我有以下实体映射:

public class TripDriverMap : EntityTypeConfiguration<TripDriver> 
{ 
    public TripDriverMap() 
    { 
     // Primary Key 
     this.HasKey(t => t.TripDriverMapID); 

     // Properties 
     // Table & Column Mappings 
     this.ToTable("slx_TripDriverMap"); 
     this.Property(t => t.TripDriverMapID).HasColumnName("TripDriverMapID"); 
     ... 
     this.Property(t => t.DriverID).HasColumnName("EntityID"); 

     // Relationships 
     ... 
     this.HasRequired(t => t.Driver) 
      .WithMany(t => t.TripDrivers) 
      .HasForeignKey(d => d.DriverID); 
     ... 
    } 
} 

public class DriverMap : EntityTypeConfiguration<Driver> 
{ 
    public DriverMap() 
    { 
     // Primary Key 
     this.HasKey(t => t.ID); 

     ... 

     this.Property(t => t.ID) 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 

     this.Property(t => t.OwnerEntityID) 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 

     // Table & Column Mappings 
     this.ToTable("slx_vw_Drivers"); 
     ... 
     this.Property(t => t.ID).HasColumnName("EntityID"); 
     ... 
    } 
} 

如果你仔细看我有一个名为ENTITYID列,我已经映射到财产DriverID。每当我试图从任一方包含相关实体时,我会得到以下错误:

无效的列名'EntityPerson_EntityPersonID'。

这是造成的,因为正在生成的SQL部分如下:

[Extent1].[EntityPerson_EntityPersonID] AS [EntityPerson_EntityPersonID] 
FROM [dbo].[slx_TripDriverMap] AS [Extent1] 
INNER JOIN [dbo].[slx_vw_Drivers] AS [Extent2] ON [Extent1].[EntityID] = [Extent2].[EntityID] 

正如你可以看到它正在寻找一个叫做EntityPerson_EntityPersonID列不存在。 它确实加入了正确的列

我无法重新命名TripDriverMap表中的列,因为它在很多地方使用,无论是在数据库,应用程序和报表中。

我该如何得到这个工作?我所做的一切,我认为我有在TripDriverMap映射定义做

回答

0

该问题是由具有TripDriver对象集合的另一个类EntityPerson上定义的属性引起的。当我删除该集合,因为它不再需要SQL生成正确。

0

而不是指定这样

this.HasRequired(t => t.Driver) 
     .WithMany(t => t.TripDrivers) 
     .HasForeignKey(d => d.DriverID); 

您TripDrive驱动关系尽量明确地定义了外键的名称

this.HasRequired(t => t.Driver) 
     .WithMany(t => t.TripDrivers) 
     .Map(m => m.MapKey("EntityPersonID")); 
+0

不幸的是,没有奏效 - 我得到一个错误,说该属性已被定义。 –

+0

当你用'Map'添加'HasRequired'时,是否删除了'Driver.'的'this.Property'声明?否则,该错误将是正确的。 – TRayburn