【问题标题】:Attach additional ObjectSets to ObjectContext from separate project将额外的 ObjectSet 从单独的项目附加到 ObjectContext
【发布时间】:2010-09-16 20:35:16
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我担心这可能是真的。根据您的逻辑,它确实有意义。我最终做的是创建一个单独的数据模型,它只对我的自定义表进行建模。然后我使用了 POCO 实体生成器模板,它给了我所需的一切。非常简单和快速。感谢您的意见拉迪斯拉夫。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      • 1970-01-01
      • 2022-09-23
      • 2023-03-14
      • 1970-01-01
      • 2021-03-29
      • 2016-01-23
      相关资源
      最近更新 更多