实体框架代码第一映射问题

时间:2013-12-22 14:29:29

标签: entity-framework entity-framework-5

我正在尝试在现有数据库上创建模型。

我目前有以下实体映射:

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 映射定义中做的所有事情

2 个答案:

答案 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生成正确。