[英]Entity Framework - casting property on null object doesn't throw an exception?
[英]Why doesn't Entity Framework throw an exception here?
看看這段代碼:
Blog blog = new Blog { Url = "http://blogs.msdn.com/adonet" };
blog.Posts.Add(
new Post { Title = "Hello World", Content = "I wrote an app using EF Core!" });
db.Add(blog);
db.SaveChanges();
// db.Database.ExecuteSqlRaw("Delete from Blogs"); --> throw exception for Foreign key
//db.Remove(blog); // --> works and doesn't throw exception
db.SaveChanges();
我不明白為什么在刪除包含帖子的博客時,我們有外鍵異常(這很正常,因為我刪除了級聯選項)。 但是當我做db.Remove(blog)
時,沒有拋出異常,並且博客從數據庫中刪除......
您必須將 Id 添加到您的 sql 腳本中。 就像現在一樣,您正在刪除所有博客,而不僅僅是一個新博客。 但是有些帖子可以有來自其他帖子的 BlogId 並且您不能刪除它們,在您為 null 分配外鍵之前,或者如果不可能刪除之前的所有帖子。
db.Database.ExecuteSqlRaw("Delete from Blogs where BlogId="+blog.BlogId.ToString());
當您刪除父實體時,您可以通過多種方式告訴 EF 行為。 如果您在刪除父級時沒有看到數據庫拋出錯誤,則 EF 正在后台進行一些修復 - 要么成功刪除它首先知道的所有子級,要么通過設置外鍵列打破關系在刪除父級之前,首先將子級轉換為 null(孤立)
如果您從未專門設置任何行為,那么 EF 正在做什么將取決於 Post.BlogId 是否可以為空。 如果不是,那么帖子將被刪除。 如果是,那么它們將被設置為具有 null BlogId。
如果您在啟動配置中找到UseSqlServer
調用並將類似於對.LogTo(Console.WriteLine, LogLevel.Information)
的調用鏈接到它,則可以顯示正在執行的 SQL(始終是一個方便的調試工具)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.