实体框架:添加不存在的列以查询多对多关系表

时间:2018-10-21 07:14:23

标签: c# sql entity-framework

我偶然发现了EF中的一个奇怪问题。我的EF模型中具有以下类层次结构

public abstract class Entity
{
   [Column]
   public string Id { get; set; }

   [Association("Links", "Id", "SourceId", IsForeignKey = false)]
   public List<EntityRelation> Relations { get; set; }
}

public class A : Entity
{
}

public class B : Entity
{
}

public class EntityRelation 
{
  [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
  [Key]
  public long Id { get; set; }

  [Column]
  public int SourceId { get; set; }

  [Column]
  public int TargetId { get; set; }

  [Column]
  public RelationType RelationType { get; set; }
}

其中A和B是映射到表的具体类,而EntityRelation类映射到一个表,该表包含A和B任一表中行之间的逻辑关系。

当我尝试将行插入Links表中时,会发生一个奇怪的问题-EF生成的INSERT语句如下:

INSERT INTO Links (SourceId, TargetId, RelationType, **A_Id**, **B_Id**)
VALUES (...)

由于某种原因,EF生成了一个INSERT语句,该语句与每种派生类型的A_Id,B_Id列相结合。

当然INSERT命令会失败,但以下情况除外:

  

System.Data.SqlClient.SqlException:无效的列名“ A_Id”。无效的列名“ B_Id”

如何避免这种情况?

0 个答案:

没有答案