2013-12-22 105 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