Удаление связанных данных в LINQ to EF - PullRequest
4 голосов
/ 06 января 2011

Я новичок в LINQ и EF, и у меня есть быстрый вопрос о форуме, который я разрабатываю. На этом форуме есть темы, и с каждой темой связаны ответы. Я предполагал, что EF увидит ограничение и при удалении темы также удалит связанные ответы. Вместо этого он выдает ошибку ограничения. Есть ли простой способ удалить все связанные ответы, не просматривая их и не отмечая каждый для удаления?

Например, в SQL я бы просто сделал что-то вроде этого:

DELETE FROM topic_replies WHERE TopicID='999'
DELETE FROM topics where TopicID='999'

Но в EF я знаю, как это сделать:

Topic topic = //LINQ to get topic.
foreach (Reply reply in topic.Replies)
{
     dbEntity.Replies.DeleteObject(reply);
}
dbEntity.Topics.DeleteObject(topic);

Полагаю, это нормально, если это то, что я должен сделать. Просто любопытно, есть ли лучший способ. Заранее спасибо.

Ответы [ 3 ]

8 голосов
/ 06 января 2011

Вы можете установить каскад на удаление в объекте владельца в схеме EF.

<Association Name="FK_ItemChildren_Item">
 <End Role="Item" Type="Model.Store.Item" Multiplicity="1">
  <OnDelete Action="Cascade" />
 </End>
 <End Role="ItemChildren" Type="Model.Store.ItemChildren"
  Multiplicity="*" />
 <ReferentialConstraint>
 ..
 </ReferentialConstraint>
</Association>

Посмотрите на http://codepolice.net/2008/12/16/cascade-delete-in-entity-framework/

4 голосов
/ 06 января 2011

В вашей базе данных Cascade ваши удаления для этих таблиц ... Затем, когда вы удалите родительский, база данных будет обрабатывать удаление дочернего.

Каскадирование является частью внешнего ключа

Пример

Если вы используете SQL Server

ALTER TABLE dbo.PersonAddress ADD CONSTRAINT
    FK_PersonAddress_Address FOREIGN KEY
    (
    AddressId
    ) REFERENCES dbo.Address
    (
    AddressId
    ) ON UPDATE  NO ACTION 
     ON DELETE  CASCADE   -- Here is where you set your Update and Delete Actions for the foreign key constraint.

Теперь в основном то, что это говорит; Если я удаляю человека, тогда база данных удалит все адреса, которые связаны с этим человеком

...