我希望这有道理。我有一个使用实体框架的asp.net web应用程序。我已经向db添加了几个自定义表,并创建了一个单独的项目来处理这些表的crud操作。我选择了单独的项目,因为我不希望将来对应用程序的升级覆盖我的自定义功能。
我的问题是这个。如何将自定义objectcontext附加/组合到应用程序的objectcontext?我想使用相同的unitofworkscope(已经在应用程序中)来维护每个http请求的一个objectcontext实例。同样,由于上面列出的原因,我不想将我的objectset添加到应用程序的objectcontext中。
下面是一些代码:
小工具.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);
我知道这是行不通的,但这正是我努力实现的要点。希望这足够清楚。谢谢。
最佳答案
我认为这不可能。objectcontext创建连接到描述映射和数据库的元数据的实体连接。但是您必须使用不同的元数据集—一个用于ASP.NET应用程序,另一个用于单独的项目。简单地说,您需要两个连接来处理这些模型=>您需要两个objectcontext。