Присоедините дополнительные ObjectSets к ObjectContext из отдельного проекта - PullRequest
2 голосов
/ 17 сентября 2010

Надеюсь, это имеет смысл. У меня есть веб-приложение 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 ]

1 голос
/ 25 апреля 2011

К вашему сведению: предыдущий ответ был верным на момент ответа. Теперь это можно сделать с помощью DbContext, доступного в EF 4.1. Предостережение заключается в том, что вы должны использовать стратегию «сначала код», чтобы создать свой собственный контекст. Другими словами, вы не сможете использовать файлы EDMX для этого.

1 голос
/ 17 сентября 2010

Я не думаю, что это возможно.ObjectContext создает соединение сущностей, которое соединяется с метаданными, описывающими отображение и базу данных.Но вы должны использовать разные наборы метаданных - один для приложения ASP.NET и один для отдельного проекта.Просто вам нужно два соединения для работы с этими моделями => вам нужно два ObjectContexts.

...