2013-07-29 54 views
0

鑑於以下UPSERT類似之情況:是否支持新行創建?

EntityType myEntity = null; 
if(newItem) 
{ 
    myEntity = new EntityType(); 
} 
else 
{ 
    myEntity = context.TableName.Where(item => item.PrimaryKey == key).Single(); 
} 

if(newItem)//This check bugs me 
{ 
    context.TableName.Add(myEntity);//conditionally add the item to the context 
} 

context.SaveChanges(); 

我必須確定,如果該項目需要被添加到上下文。實體框架是否提供任何種類的context.TableName.NewRow()或類似的來保存最後的條件檢查?這樣我可以做這樣的事情,而不是....

EntityType myEntity = null; 
if(newItem) 
{ 
    myEntity = context.TableName.NewRow(); 
} 
else 
{ 
    myEntity = context.TableName.Where(item => item.PrimaryKey == key).Single(); 
} 

context.SaveChanges(); 

一個通用的擴展方法應該爲我做這個簡單的任務,只是似乎很奇怪,(如果)這不已經在框架存在。

+2

有用第一個條件中的「添加」? – Basic

回答

1

是否有這樣的工作適合你?

EntityType myEntity = null; 
if(newItem) 
{ 
    context.TableName.Add(myEntity = new EntityType()); 
} 
else 
{ 
    myEntity = context.TableName.Where(item => item.PrimaryKey == key).Single(); 
} 

context.SaveChanges(); 
+0

這當然是正確的想法。我想確保框架中不存在這種類型的功能。 –

0

由於看來這是不具備的EF,我創建了自己的擴展做到這一點:爲什麼不把

public static T NewRow<T>(this System.Data.Entity.DbSet<T> entity) where T : class, new() 
    { 
     T t = new T(); 
     entity.Add(t); 
     return t; 
    } 
0

標準EF功能可能會在這裏

Context.Set<TPoco>().AddOrUpdate(poco);