2

我希望这是有道理的。我有一个使用实体框架的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); 

我知道这不会工作,但那是什么,我试图完成的要点。希望这已经够清楚了。谢谢。

回答

1

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

+0

我担心这可能是真的。它根据你的逻辑确实有意义。我最终做的是创建一个独立的数据模型,只模拟我的自定义表。然后我使用了POCO实体生成器模板,这给了我所需的一切。非常简单和快速。感谢您的投入拉迪斯拉夫。 – trevorc 2010-09-17 11:34:47

1

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

相关问题