我偶然发现了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”
如何避免这种情况?