2

これが理にかなっていることを願っています。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);

これがうまくいかないことはわかっていますが、それが私が達成しようとしていることの要点です。これが十分に明確であることを願っています。ありがとう。

4

2 に答える 2

1

参考:前回の回答は、回答時点で正解でした。EF4.1で利用可能なDbContextを使用してこれを行うことが可能になりました。注意点は、カスタムコンテキストを構築するには、コードファースト戦略を使用する必要があるということです。つまり、EDMXファイルを使用してこれを実行することはできません。

于 2011-04-25T19:52:55.513 に答える
1

私はそれが可能だとは思わない。ObjectContext は、マッピングとデータベースを記述するメタデータに接続するエンティティ接続を作成します。ただし、ASP.NET アプリケーション用と別のプロジェクト用の異なるメタデータ セットが必要です。これらのモデルを操作するには、単純に 2 つの接続が必要です => 2 つの ObjectContext が必要です。

于 2010-09-16T20:41:14.543 に答える