Я наткнулся на странную проблему в 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'
Как мне избежать этого?