2

我希望这是有道理的。我有一个使用实体框架的 ASP.NET Web 应用程序。我在数据库中添加了几个自定义表,并创建了一个单独的项目来处理这些表的 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);

我知道这行不通,但这就是我要完成的工作的要点。希望这足够清楚。谢谢。

4

2 回答 2

1

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

于 2010-09-16T20:41:14.543 回答
1

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

于 2011-04-25T19:52:55.513 回答