這是我昨天問的跟進問題this question。我仔細追蹤了我認爲導致我悲傷的問題,我想我可以更清楚地解釋情況。如何使用實體框架提交具有多對多關係的對象?
我似乎無法弄清楚如何使用C#ASP.NET MVC 2項目中的實體框架編寫具有與SQL數據庫的多對多關係的對象。
這裏是我的嘗試:
我有隻有兩個表一個非常簡單的數據庫。愛好與列的名稱和說明和人與列名和姓。我創建了一個默認的.edmx與所有選定的。 (兩者也使用int作爲主鍵(HobbieID,是PersonID),我在設計成可自動遞增數據庫中設置。)
我可以再使用成功以下代碼:
SampleEntities entities = new SampleEntities();
Hobby h1 = new Hobby() { Name = "Tennis", Description = "Not golf" };
Person p1 = new Person() { First = "Jack", Last = "Black" };
entities.Hobbies.AddObject(h1);
entities.People.AddObject(p1);
entities.SaveChanges();
果然兩者都正確添加到數據庫中。現在它破裂了。
我添加另一個表名爲JunctionHobbiesPeople的數據庫,它有兩列(HobbieID,PersonID),我使用數據庫設計器中的關係彈出窗口創建外鍵。然後,我將JunctionHobbiesPeople表添加到實體設計器(通過右鍵單擊更新,使用GUI),並以圖形方式顯示正確的多對多關係。
然後我嘗試下面的代碼:
SampleEntities entities = new SampleEntities();
Hobby h1 = new Hobby() { Name = "Tennis", Description = "Not golf" };
Person p1 = new Person() { First = "Jack", Last = "Black" };
p1.Hobbies.Add(h1);
entities.People.AddObject(p1);
entities.SaveChanges();
的第一個錯誤我得到的是約DefiningQuery。我可以通過從.edmx文件後面的代碼中的xml中刪除所有DefiningQuery元素來解決這個問題。說到這一點,作爲一個側面問題,這個要素是什麼 - 我不應該刪除它嗎?
之後錯誤消失,我得到以下錯誤:
InnerException {"Invalid object name 'ModelStoreContainer.JunctionHobbiesPeople'."} System.Exception {System.Data.SqlClient.SqlException}
任何想法就是我做錯了嗎?我是否需要特別訂購它們?我如何獲得多對多關係以正確寫入數據庫?
感謝您的幫助!
我會問你關於你以前的問題的同一個問題:你在JunctionHobbiesPeople上有一個* real * PK嗎? – 2010-07-22 20:32:19
我不知道我明白 - 一個真正的PK?這些列顯示了鍵符號以顯示它們已被標記爲主鍵,並且在Junction表存在之前向表中添加數據時它會自動遞增。還有什麼我需要做的嗎? – Evan 2010-07-22 20:55:00
@evan - 我認爲Craig在數據庫中談論的不僅僅是EF設計師。如果你只做了兩張表「愛好和人」,然後在他們之間建立了多對多的關聯呢? – TheCloudlessSky 2010-07-22 22:47:26