Присоедините дополнительные ObjectSets к ObjectContext из отдельного проекта
Я надеюсь это имеет смысл. У меня есть веб-приложение ASP.NET, которое использует Entity Framework. Я добавил пару пользовательских таблиц в базу данных и создал отдельный проект для обработки операций CRUD для этих таблиц. Я выбрал отдельный проект, потому что не хочу, чтобы будущие обновления приложения переписывали мои пользовательские функции.
Моя проблема в этом. Как мне прикрепить / объединить мой пользовательский ObjectContext с ObjectContext приложения? Я хочу использовать тот же UnitOfWorkScope (уже в приложении), чтобы поддерживать один экземпляр ObjectContext для HTTP-запроса. Опять же, я не хочу добавлять мои ObjectSets в 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 ответа
Я не думаю, что это возможно. ObjectContext создает соединение сущностей, которое соединяется с метаданными, описывающими отображение и базу данных. Но вы должны использовать разные наборы метаданных - один для приложения ASP.NET и один для отдельного проекта. Просто вам нужно два соединения для работы с этими моделями => вам нужно два ObjectContexts.
К вашему сведению: предыдущий ответ был верным на момент ответа. Теперь это можно сделать с помощью DbContext, доступного в EF 4.1. Предостережение заключается в том, что вы должны использовать стратегию "сначала код", чтобы создать свой собственный контекст. Другими словами, вы не сможете использовать файлы EDMX для этого.