2013-06-12 5 views
5

VS 2012 (11.0.60315.01 Update 2), C# 5, Entity Framework 5.0.0.0 (Runtime v4.0.30319)Entity Framework 5 - удаление дочерних записей

Я знаю, что подобные вопросы были размещены в прошлом, но кажется, нет ответа. Я думаю, что понимаю ошибку, но меня больше интересует поиск «желаемого» решения. Все, что я хочу сделать, это удалить запись из таблицы Child. Может ли кто-нибудь помочь?

Это полный и простой пример. В SaveChanges() выдает следующее исключение:

«Операция не удалась:. Отношения не могут быть изменены, так как один или несколько внешних ключей свойств ненулевое При внесении изменений в отношениях, для соответствующего свойства внешнего ключа установлено значение null. Если внешний ключ не поддерживает нулевые значения, необходимо определить новое отношение, для свойства внешнего ключа должно быть назначено другое ненулевое значение, или не связанный с ним объект должен быть удаленным ".

код выглядит следующим образом:

using System.Linq; 

namespace EFDeleteTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (EFTestEntities context = new EFTestEntities()) 
      { 
       var parent = context.Parents.Single(p => p.Id == 1); 

       var child = parent.Children.Single(c => c.Id == 1); 

       parent.Children.Remove(child); 

       context.SaveChanges(); // Throws the above Exception 
      } 
     } 
    } 
} 

База данных выглядит следующим образом:

Parent 
    Id (PK, int, not null) IDENTITY 
    Name (nvarchar(50), null) 

Child 
    Id  (PK, int, not null) IDENTITY 
    ParentId (FK, int, not null) -- Foreign Key to the Parent Table (Id column)) 
    Name  (nvarchar(50), null) 

Существует одна запись в таблице Parent (Id = 1) и есть 2 записей в Детский стол (идентификаторы 1 и 2). У обоих записей Child есть ParentId = 1.

+0

Вы должны добавить больше тегов в свой вопрос, таких как 'C#', 'VS2012' и т. Д. Таким образом вы получите больше просмотров и ответов. – Komengem

ответ

7

Если вы хотите удалить дочерний объект, родительский объект не должен интересоваться логикой. Попробуйте код ниже, дайте мне знать, что произойдет (не проверено).

using System.Linq; 

namespace EFDeleteTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (EFTestEntities context = new EFTestEntities()) 
      {      
       var child = context.Children.Single(c => c.Id == 1); 

       context.Children.Remove(child); 

       context.SaveChanges(); 
      } 
     } 
    } 
} 
+0

Komenge, вы код работал. Мой основной проект (без доступа к нему на данный момент), вероятно, немного сложнее, чем этот пример, но я уверен, что смогу настроить его таким же образом. Спасибо за быстрый ответ. –

Смежные вопросы