我希望這是有道理的。我有一個使用實體框架的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);
我知道這不會工作,但那是什麼,我試圖完成的要點。希望這已經夠清楚了。謝謝。
我擔心這可能是真的。它根據你的邏輯確實有意義。我最終做的是創建一個獨立的數據模型,只模擬我的自定義表。然後我使用了POCO實體生成器模板,這給了我所需的一切。非常簡單和快速。感謝您的投入拉迪斯拉夫。 – trevorc 2010-09-17 11:34:47