簡體   English   中英

實體框架 6 Create() 與 new

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM