我正在尝试在现有数据库上创建模型。
我目前有以下实体映射:
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 :(得分:0)
而不是像这样指定TripDrive-Driver关系
this.HasRequired(t => t.Driver)
.WithMany(t => t.TripDrivers)
.HasForeignKey(d => d.DriverID);
尝试显式定义外键名称
this.HasRequired(t => t.Driver)
.WithMany(t => t.TripDrivers)
.Map(m => m.MapKey("EntityPersonID"));
答案 1 :(得分:0)
问题是由在另一个具有TripDriver对象集合的EntityPerson类上定义的属性引起的。当我删除该集合时,不再需要SQL生成正确。