[英]Entity Framework 6 Create() vs new
這兩種方式添加實體有什么區別?
MyEntity me = new MyEntity();
entities.myentities.Add(me);
對比
MyEntity me = entities.myentities.Create();
我還需要在第二個例子中添加“我”嗎? 如果是這樣,是否有某種優勢,一種方式還是另一種方式?
非常感謝!
MyEntity me = new MyEntity();
將創建一個新的MyEntity
實例
MyEntity me = entities.myentities.Create();
將創建MyEntity
的代理包裝實例(假設您的上下文配置為創建代理)
此代理會覆蓋實體的一些虛擬屬性,以在訪問該屬性時插入用於自動執行操作的鈎子。 例如,該機制用於支持關系的延遲加載。
是的,您仍然需要添加它。 從 Create 方法的文檔中:
為該集合的類型創建實體的新實例。 請注意,此實例未添加或附加到集合。
MyEntity me = new MyEntity();
等於
MyEntity me = entities.myentities.Create();
以上都創建了一個 MyEntity 的新實例,但都沒有將它附加到由 myentities 表示的 DbSet。
線
entities.myentities.Add(me)
將實例附加到 DbSet,但您也可以使用Attach(me)
。
在第二個示例中需要“me”,因為您將創建一個對象實例,而沒有引用來保存該對象。
如果使用實體繼承,則可以使用 Create() 方法實現良好的多態行為,因為它始終實例化正確的實體(不是通用實體)。 例子:
public DbSet GetDialDbSet(DialEnum type)
{
DbSet ret;
switch (type)
{
default:
case DialEnum.MAPPING_REASON:
ret = DialMappingReasons;
break;
case DialEnum.PROCESSING_INFORMATION:
ret = DialProcessingInformation;
break;
}
return ret;
}
和多態用法:
DialDerived entity = (DialDerived) Db.GetDialDbSet(type).Create()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.