2

我希望這是有道理的。我有一個使用實體框架的ASP.NET Web應用程序。我已經添加了一些自定義表到數據庫,並創建了一個單獨的項目來處理這些表的CRUD操作。我選擇了單獨的項目,因爲我不想將來升級到應用程序來覆蓋我的自定義功能。將附加的ObjectSet從獨立的項目附加到ObjectContext

我的問題是這樣的。如何將我的自定義ObjectContext附加/組合到應用程序的ObjectContext中?我想使用相同的UnitOfWorkScope(已經在應用程序中)來維護每個HTTP請求的一個ObjectContext實例。同樣,我不想將我的ObjectSet添加到應用程序的ObjectContext中,因爲我上面列出的原因。

下面是一些代碼:

Widget.cs

public partial class Widget 
{ 
public Widget() 
{ 
} 
public int WidgetId {get;set;} 
public string WidgetName {get;set;} 
} 

WidgetObjectContext.cs

public partial class WidgetObjectContext : ObjectContext 
{ 
private readonly Dictionary<Type, object> _entitySets; 

public ObjectSet<T> EntitySet<T>() 
where T : BaseEntity 
{ 
var t = typeof(T); 
object match; 
if(!_entitySets.TryGetValue(t, out match)) 
{ 
match = CreateObjectSet<T>(); 
_entitySets.Add(t, match); 
} 
return (ObjectSet<T>)match; 
} 

public ObjectSet<Widget> Widgets 
{ 
get 
{ 
if((_widgets == null)) 
{ 
_widgets = CreateObjectSet<Widget>(); 
} 
return _widget; 
} 
} 
private ObjectSet<Widget> _widgets; 

在我WidgetManager類,如果我在使用應用程序的ObjectContext的我會質疑我的表像這個:

var context = ObjectContextHelper.CurrentObjectContext; 
var query = from c in context.ObjectSet .... etc 

我想會是做這樣的事情:

var context = ObjectContextHelper.CurrentObjectContext.Attach(WidgetObjectContext); 

我知道這不會工作,但那是什麼,我試圖完成的要點。希望這已經夠清楚了。謝謝。

回答

1

我不認爲這是可能的。 ObjectContext創建連接到描述映射和數據庫的元數據的實體連接。但是你必須有不同的元數據集 - 一個用於ASP.NET應用程序,一個用於單獨的項目。只需要兩個連接即可使用這些模型= >您需要兩個ObjectContext。

+0

我擔心這可能是真的。它根據你的邏輯確實有意義。我最終做的是創建一個獨立的數據模型,只模擬我的自定義表。然後我使用了POCO實體生成器模板,這給了我所需的一切。非常簡單和快速。感謝您的投入拉迪斯拉夫。 – trevorc 2010-09-17 11:34:47

1

供參考:在答案時前面的答案是正確的。現在可以使用EF 4.1中提供的DbContext來完成此操作。需要注意的是,您必須使用代碼優先策略才能構建自定義上下文。換句話說,你將無法使用EDMX文件來實現這一點。

相關問題