これが理にかなっていることを願っています。Entity Framework を使用する ASP.NET Web アプリケーションがあります。いくつかのカスタム テーブルを db に追加し、それらのテーブルの CRUD 操作を処理する別のプロジェクトを作成しました。アプリケーションの将来のアップグレードでカスタム機能が上書きされないようにするため、別のプロジェクトを選択しました。
私の問題はこれです。カスタム ObjectContext をアプリケーションの ObjectContext にアタッチ/結合するにはどうすればよいですか? 同じ UnitOfWorkScope (既にアプリケーション内) を使用して、HTTP 要求ごとに 1 つの 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);
これがうまくいかないことはわかっていますが、それが私が達成しようとしていることの要点です。これが十分に明確であることを願っています。ありがとう。