2013-04-15 136 views
1

我正在使用我正在開發的webapp的實體框架。網絡應用程序跟蹤場地。每個場地可以舉辦幾種類型的活動。我有一個包含所有不同類型事件類型(EventTypes)的表格和另一個表格,用於跟蹤每個場地可以具有的事件(VenueEventTypes),當我添加一個新場地時,創建一個新的VenueEventTypes集合,其中包含EventType Propery並出去到數據庫並找到事件類型並將其添加到每個VenueEventTypes。問題是,當我保存場地時,它創建的一切都很好,但它在數據庫中爲EventType添加了一條空記錄,但VenueEventType外鍵指向有效事件類型,而不是新創建的空的記錄。這裏是一些代碼:實體框架插入空記錄

public void addVenue(VEN_Venues venue) 
    { 
     using (var db = new VenueEntities()) 
     { 
      var parish = from dbParish in db.VEN_Parishes 
         where dbParish.ParishID == venue.ParishID 
         select dbParish; 

      venue.VEN_Parishes = parish.First(); 

      venue = this.processEventTypes(venue, db); 
      db.VEN_Venues.AddObject(venue); 
      db.SaveChanges(); 
     } 
    } 



    private VEN_Venues processEventTypes(VEN_Venues venue, VenueEntities db) 
    { 
     foreach (VEN_VenueEventTypes eventType in venue.VEN_VenueEventTypes) 
     { 
      eventType.VEN_EventTypes = new EventTypeFacade().findEventTypes(eventType.VEN_EventTypes, db); 
     } 
     return venue; 
    } 

有人可以指向我的錯誤?

謝謝!

回答

0

它似乎並不像你實際上將VEN_EventType添加到venue.VEN_VenueEventTypes

你要做的東西沿着這些路線:

venue.VEN_VenueEventTypes.Add(eventType); 

,如果你不希望任何重複,你將不得不使用附:

venue.VEN_VenueEventTypes.Attach(eventType); 
+0

我加入它的代碼背後的頁。問題是在數據庫中正確設置了所有內容,除了在EventTypes表中添加了一個額外的行,該表中有一個id與行的其餘部分爲空。 – functionalCode

+0

您需要使用'Attach'來避免重複的行條目。您每次將其添加到'venue.VEN_VenueEventTypes'時都會創建一個全新的'EventType'。 'Attach'只會添加你想要的'Venue'和'EventType'之間的關係。看看這個SO帖子http://stackoverflow.com/questions/11385429/how-to-update-create-many-to-many-relational-data-in-mvc-code-first-using-ef – SOfanatic

+0

行不是重複的,它是一個ID與所有其他字段爲空的行。表中的其他一切都是正確的。外鍵是正確的,只是添加了空值的不需要的記錄。 – functionalCode