我搜索了在EF 4中使用的onObjectMaterialized,以便在實體實體化後儘快運行代碼。但只找到3個答案,沒有真正的幫助。實體框架5 onObjectMaterialized缺失?
在EF4中,我記得編輯VS.NET EF模板,然後更新VS.NET以使用那些可以使ObjectContext啓用支持的新模板。
但是對於EF 5,我現在有了一個DBContext並且似乎無法找出如何做同樣的事情。
非常感謝您的幫助。
我搜索了在EF 4中使用的onObjectMaterialized,以便在實體實體化後儘快運行代碼。但只找到3個答案,沒有真正的幫助。實體框架5 onObjectMaterialized缺失?
在EF4中,我記得編輯VS.NET EF模板,然後更新VS.NET以使用那些可以使ObjectContext啓用支持的新模板。
但是對於EF 5,我現在有了一個DBContext並且似乎無法找出如何做同樣的事情。
非常感謝您的幫助。
更好的解決方案是消除整個edmx事物並使用反向代碼優先方法。這最終效率更高,我不必在edmx中用xml玩遊戲。
感謝Mystere Man,我有一個答案。這比我想象的要容易得多。
其他可能有不同的方法,但關鍵信息是相同的。
爲您的上下文創建部分類。這不是必需的,但它有助於將代碼與生成的代碼隔離。
在解決方案下的xxxModel.edmx應該是4個單獨的文件。打開以.tt結尾的那個。這是模板。
在模板中,在模板代碼之後添加對方法的調用以創建構造函數。模板代碼應類似於此:現在
<#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : DbContext
{
public <#=code.Escape(container)#>()
: base("name=<#=container.Name#>")
{
// Put your method call here
MyConstructor();
,在局部類(或模板,如果你不使用局部類),定義方法,並從空軍終於滿添加代碼。
protected void MyConstructor()
{
((IObjectContextAdapter)this).ObjectContext.ObjectMaterialized += this.ObjectContext_OnObjectMaterialized;
}
然後你只需要添加你的方法來火了:
public void ObjectContext_OnObjectMaterialized(Object sender, ObjectMaterializedEventArgs e)
{
if (e.Entity is IMyEntityClass) .....
或任何你想有當實體materialzed發生。就我而言,我只是檢查,如果實體是保存填充字段的類型,如果是這樣,調用的代碼把它解壓(這是一個分部類的實體。)
享受
你想要做什麼?也許有更好的方法去做你想做的事情?你是否嘗試初始化對象? –
我有一個「打包的字段」,我需要解壓縮。我無法控制數據庫或結構。有了EF5,我必須實體化實體,然後調用解壓縮方法。另一種方法是在所有需要解包的情況下添加一個支票 - 但這是很多重複的代碼。 – JustMeToo
您始終可以使用對象上下文適配器。像這樣的'((IObjectContextAdapter)this).ObjectContext.ObjectMaterialized + = this.ObjectContext_OnObjectMaterialized;' –