Dot-Net
在實體框架中創建<Object> vs new <Object>
我有一個實體對象的初始化程序/更新程序。使用有沒有危險
Dim myObject As SpecialThing = New SpecialThing()然後設置所有值(使用已經編寫的更新程序),還是我需要使用:
Dim myObject As SpecialThing = SpecialThing.Create()有 30 個參數,更新程序已經設置了值/處理錯誤。只是想重用該程式碼。
如果您自己創建對象,它不會附加到上下文中。您需要附加對象才能在數據庫中更新更改。
即使您使用 Create 方法創建實體,它也不會附加到上下文,這將通過 SaveChanges 方法保存在數據庫中。 http://msdn.microsoft.com/en-us/library/gg696136(v=vs.113).aspx
我不知道你到底是什麼意思
myDB.CreateSpecialThing(.....)。我有三種解釋:
objectContext.CreateObject<SpecialThing>()dbContext.SpecialThings.Create()(EF >= 4.1)SpecialThing.Create(.....)(EntityObject派生實體的靜態方法)第三種方法只是一個自動生成的助手,它接受參數(對於必填欄位)、設置屬性並返回對象。
new這與創建對象並隨後設置屬性完全相同。如果您正在使用 POCO 並使用延遲載入或更改跟踪代理,則前兩種方法會發揮作用。這些方法將創建實體的動態代理(這是從您的實體類派生的動態類),而不是直接創建實體。這些方法都沒有將實體附加到上下文,您必須手動執行此操作 - 無論您是使用這些方法創建實體還是使用
new.使用
CreateObject<T>/Create可能很重要的範例,假設User實體具有virtualRoles集合:using (var ctx = new MyDbContext()) { var user = ctx.Users.Create(); user.Id = 1; ctx.Users.Attach(user); var roles = user.Roles; }使用為集合
virtual啟用延遲載入,上面的程式碼將載入使用者 1 的所有角色(如果使用者沒有角色,則載入一個空集合)。另一方面Roles使用…newusing (var ctx = new MyDbContext()) { var user = new User { Id = 1 }; ctx.Users.Attach(user); var roles = user.Roles; }…不允許延遲載入集合,因為
user它不是動態代理對象。roles將是null,無論使用者是否具有角色。所以,我想說用
new. 您只需要記住,對於使用new.