从单独的项目中将其他ObjectSet附加到ObjectContext

时间:2010-09-16 20:35:16

标签: asp.net database entity-framework-4 objectcontext objectset

我希望这是有道理的。我有一个使用Entity Framework的ASP.NET Web应用程序。我已经向db添加了几个自定义表,并创建了一个单独的项目来处理这些表的CRUD操作。我选择了单独的项目,因为我不希望将来升级到应用程序来覆盖我的自定义功能。

我的问题是这个。如何将自定义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);

我知道这不起作用,但这是我想要完成的事情的要点。希望这很清楚。谢谢。

2 个答案:

答案 0 :(得分:1)

我认为不可能。 ObjectContext创建实体连接,该连接连接到描述映射和数据库的元数据。但是您必须使用不同的元数据集 - 一个用于ASP.NET应用程序,另一个用于单独的项目。只需要两个连接即可使用这些模型=&gt;你需要两个ObjectContexts。

答案 1 :(得分:1)

仅供参考:回答时的上一个答案是正确的。现在可以使用EF 4.1中提供的DbContext来完成此操作。需要注意的是,您必须使用代码优先策略来构建自定义上下文。换句话说,您将无法使用EDMX文件来完成此任务。