簡體   English   中英

實體框架5 - 刪除子記錄

[英]Entity Framework 5 - Deleting Child Records

VS 2012(11.0.60315.01 Update 2),C#5,Entity Framework 5.0.0.0(Runtime v4.0.30319)

我知道過去曾發布類似的問題,但似乎沒有答案。 我想我理解錯誤,但我更感興趣的是找到“理想的”解決方案。 我想要做的就是從Child表中刪除一條記錄。 有人可以幫忙嗎?

這是一個完整簡單的例子。 SaveChanges()拋出以下異常:

“操作失敗:由於一個或多個外鍵屬性不可為空,因此無法更改關系。當對關系進行更改時,相關的外鍵屬性將設置為空值。 foreign-key不支持空值,必須定義新關系,必須為foreign-key屬性分配另一個非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),Child表中有2條記錄(Id為1和2)。 兩個子記錄都有ParentId = 1。

如果您只想刪除子對象,則不應該在邏輯中關注父對象。 試試下面的代碼,讓我知道會發生什么(未經測試)。

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();
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM