2011-06-16 42 views
0

我試圖通過創建新的實例並添加它使用AddTo方法,然後我打電話SaveChanges()方法來更新我的數據庫,但沒有新的重新編碼已添加一些新項目添加到實體組。如何使用EF4將新項目添加到EntitySet?

foreach (var newitem in newItemsList) 
{ 
     if (newitem.SomeValue > 0) 
     { 
      dbcontext.AddToMyEntityType(newitem); 
     } 
} 
dbcontext.SaveChanges(); 

,但是當我用MyEntityType.CreateMyEntityType()方法所有新項目都保存到我的數據庫

foreach (var newitem in newItemsList) 
{ 
     if (newitem.SomeValue > 0) 
     { 
      MyEntityType _newEntity = MyEntityType.CreateMyEntityType();//I passed the required parameters 
      dbcontext.AddToMyEntityType(_newEntity); 
     } 
} 
dbcontext.SaveChanges(); 

爲什麼????

我應該使用Create方法還是有其他方法可以做到這一點?

編輯

我忘了提,newitem有一個導航屬性(父表的外鍵),我設置該屬性有一個正確的父ID

+0

什麼是AddToMyEntityType和CreateMyEntityType? – VikciaR 2011-06-16 13:23:22

+0

@VikciaR :) AddToEntityTypeName和CreateEntityTypeName就像AddToPersons和CreatePerson – 2011-06-16 13:26:30

+0

什麼是dbcontext和mycontext? – VikciaR 2011-06-16 13:29:11

回答

1

必須有之間的差異和_newEntity屬性。 CreateMyEntityType(...)不會做的更多,然後new MyEntityType並設置您傳入的屬性。CreateMyEntityType(...)鼓勵爲所有必填字段設置屬性。也許你設置了一個沒有在newItem中設置的必需屬性(如字符串)。 SaveChanges在你的第一個例子中會拋出一個異常,因爲缺少必填字段,但你隱藏了這個異常(通過try { ... } catch {}或其他)。檢查調試器是否SaveChanges毫無例外地通過。

一個假設。

+0

我設置所有屬性和使用調試器來檢查'SaveChanges()'拋出任何異常,但沒有發生異常,也沒有保存到我的數據庫。 – 2011-06-16 21:33:30

+0

@Miroprocessor:如果上下文中存在'Added'狀態的對象,可以在調用'SaveChanges'之前檢查,如下所示:'dbcontext.ObjectStateManager.GetObjectStateEntries(EntityState.Added).ToList();' – Slauma 2011-06-16 23:16:45

+0

'新增'狀態,我的'dbcontext'包含添加的項目,但仍未保存到我的數據庫中。我原諒了,並會使用'Create'方法。感謝您的關注 – 2011-06-19 09:07:55

1

在第一部分,你是不是初始化實體的對象設置 ,如果你做一些這樣的事

foreach (var newitem in newItemsList) 
{ 
    if (newitem.SomeValue > 0) 
    { 
     MyEntityType obj = new MyEntityType 
     { 
     value1 = newitem.somevalue, 
     value2 = newitem.someothervalue 
     }; 

     myContext.AddToMyEntityType(obj); 
    } 
} 
    dbcontext.SaveChanges(); 

在初始化EntitySet的對象這將工作你deifned中,u溫妮添加新對象enititySet,也是你的seceod部分通過此

MyEntityType _newEntity = MyEntityType.CreateMyEntityType(); 

    myContext.AddToMyEntityType(_newEntity); 

這裏initilazes的entiity的對象,你是在告訴添加_newEntity我MyEntityType AddToMyEntityType是添加depreceated方法新對象MyEntityType實體集..

+0

我試過了你的第一個解決方案,但是它也沒有工作! – 2011-06-16 13:46:54

+0

ohh,newitem包含的MyEntityType是什麼?嘗試編輯後的代碼 – Syeda 2011-06-16 14:02:24

+0

它的工作原理,但是和'create'方法做的一樣。!!!!!! – 2011-06-16 14:18:34

1
foreach (var newitem in newItemsList) 
{ 
     if (newitem.SomeValue > 0) 
     { 
      dbcontext.AddObject("entity set name", newitem); 
     } 
} 
dbcontext.SaveChanges(); 

var entitySet = dbcontext.CreateObjectSet<item type>(); 
foreach (var newitem in newItemsList) 
{ 
     if (newitem.SomeValue > 0) 
     { 
      entitySet.AddObject(newitem); 
     } 
} 
dbcontext.SaveChanges(); 
+0

我嘗試了這些解決方案,但沒有工作,我不知道我必須使用'創建'方法?!!!!! – 2011-06-16 14:12:10

+0

@Miroprocessor你確定你的'newitem'類型是EF模型的一部分嗎? – Eranga 2011-06-16 14:31:23

+0

是的。 'newItemsList'是'List '和'MyEntityType'是EF模型的一部分。 – 2011-06-16 14:35:27

相關問題