我在现有 SQL DB 上遇到 EF 4.2 Code First 问题。
我有多个实体,如公司、用户等。
公共信息存储在一个名为 Entity 的单独表中,主键为 [EntityId, EntityTypeId]。
- EntityId 对应 CorporateId、UserId 等。
- EntityTypeId 是一个静态 ID,用作实体之间的鉴别器
我有以下课程设计。
public class User
{
public int Id {get;set;}
public int EntityTypeId { get { return 1; } set { }}
public Entity Entity {get;set;}
}
public class Entity
{
public int Id {get;set;}
public int EntityTypeId {get;set;}
}
如您所见,EntityTypeId 是静态属性,用户表中没有相应的列。
地图:
public UserMap()
{
// Primary Key
this.HasKey(t => t.Id);
// Table & Column Mappings
this.ToTable("User");
this.Property(t => t.Id).HasColumnName("UserId");
// Relationships
this.HasRequired(t => t.Entity)
.WithMany()
.HasForeignKey(p => new { p.Id, p.EntityTypeId }); //<-- Problem
}
public EntityMap()
{
// Primary Key
this.HasKey(t => new { t.Id, t.EntityTypeId });
// Table & Column Mappings
this.ToTable("Entity");
this.Property(t => t.Id).HasColumnName("EntityId");
this.Property(t => t.EntityTypeId).HasColumnName("EntityTypeId");
}
当我运行此代码时,我收到错误消息:System.Data.SqlClient.SqlException:列名“EntityTypeId”无效。
我认为这是因为 EntityTypeId 列在 User 表中不存在。有没有办法解决这个问题,因为我不能在表格上创建这个列?!
非常感谢