|
EF, удаление связанных сущностей
|
|||
---|---|---|---|
#18+
Добрый день! Помогите пожалуйста разобраться с ситуацией. Использую EF 6. Модель следующая: имеется сущность - полиморфизм гена (первичный ключ id). Полиморфизм может ссылаться на несколько генотипов (первичный ключ id, внешний ключ idPolymorphism). Обычна связь одни ко многим, первичный ключ/внешний ключ. Для полиморфизма сущностный класс public partial class Polymorphism : IEntity<int> { public Polymorphism() { Genotypes = new HashSet<Genotype>(); } public int id { get; set; } [Column("polymorphism")] [Required] [StringLength(200)] public string polymorphism { get; set; } public int idGene { get; set; } public virtual Gene Gene { get; set; } public virtual ICollection<Genotype> Genotypes { get; set; } } содержит свойство навигации, коллекцию генотипов. Загружаю полиморфизм в данном контексте по ключу с коллекцией генотипов. Далее хочу удалить из данного полиморфизма один генотип. Удаляю его из коллекции Genotypes. Сохраняю изменения в контексте. EF в этом случае пытается удалить связь с помощью установки значения NULL для внешнего ключа генотипа. В базе значение NULL для этого поля запрещено. Выдается исключение. Я же хочу чтобы EF именно удалил запись, а не оставил запись в базе с NULL во внешнем ключе. Как это можно сделать? Может данное поведение где-то настраиваться? Сущности загружаются и модифицируются через репозиторий (для каждой сущности, являющейся узлом агрегации, свой репозиторий). Поэтому для того чтобы удалить генотип отдельно понадобится свой репозиторий, со совоим контекстом и т. д. Плюс не будет возможности отмены. В общем удалять отдельно генотип нет возможно. Хотелось это сделать в полиморфизме, в рамках данного репозитория и контекста. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 14:58 |
|
EF, удаление связанных сущностей
|
|||
---|---|---|---|
#18+
Есть некоторые мысли по поводу ситуации. В моей ситуации имеется так называемая неидентифицирующая связь для связки двух сильных сущностей. В идентифицирующей связи вяжутся две сильные сущности, который в принципе могут существовать независимо. В это случае первичный ключ главной сущности входит в состав неключевых атрибутов зависимой сущности. Как в моей ситуации. полиморфизм имеет свой id и генотипы в полиморфизме имеют свои id. А idPolymorphism (внешний ключ) не входит в первичный полиморфизма. Идентифицирующая связь - связь при которой внешний ключ входит в состав первичного ключа зависимой, слабой сущности. И в этом случае зависимая сущность не может существовать без главной. Это как шапка и строки заказа на покупку, например. Строка заказа без шапки бессмысленна. И ключ у нее, например, purchId, lineNum. Где purchId, понятно, первичный ключ заказа. Так вот, EF при удалении из коллекции (навигационное свойство) сущности при неидентифицирующей связи пытается установить во внешний ключ NULL. Т. к. при такой связи зависимая сущность в принципе может существовать самостоятельно. А вот при идентифицирующей связи зависимая сущность удаляется из базы, т. к. при такой связи зависима сущность самостоятельно не может существовать. У меня генотип - сильная сущность со свои id. На который еще ссылаются еще много чего. Переделать ее я не могу. Может у кого-то будут мысли как все таки добиться удаления в данной ситуации зависимой сущности. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 17:00 |
|
EF, удаление связанных сущностей
|
|||
---|---|---|---|
#18+
Oleg5555В идентифицирующей связи вяжутся две сильные сущности, который в принципе могут существовать независимо. Ошибку допусти. В первом описание неидентифицирующая связь. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 17:03 |
|
|
start [/forum/topic.php?fid=17&tid=1349677]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
154ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
others: | 248ms |
total: | 482ms |
0 / 0 |