私はデータベースコンテキストのクラスでDbSetを宣言しようとしています。 私はどのクラス(Entity Framwork Class)ユーザも呼び出していないためです。 そのため、DbSetを動的に宣言したいのです。DbSet <dynamic>の宣言方法は?
0
A
答えて
0
私はあなたの文脈で明示的に定義されたすべてを持っているようにしようとします。そのプロパティ宣言には多くの機能が組み込まれていますが、そのうちの最小のものが型を持つことによる設計時のメリットです。
ダイナミッククエリには多くの手法がありますが、過去に使用したものをルックアップテーブルを動的にクエリするために投稿します。ここ
public List<LookupItemDTO> LoadItems(int lookupId)
{
//nothing special here, just map the lookup id to a name
var lookupRepo = new LookupRepository<LookupDefinition>(uow);
var lookup = lookupRepo.Find(id);
//map the lookup's name from the table to a type. This is important DO NOT ACCEPT A TABLE NAME FROM THE USER.
var targetType = Type.GetType("MyApp.DomainClasses.Lookup." + lookup.Name + ",MyApp.DomainClasses");
// this is an optional extra step but it allows us to instantiate an instance of our repository to ensure that business rules are enforced
var lookupType = typeof(LookupRepository<>).MakeGenericType(targetType);
dynamic LookupTable = Activator.CreateInstance(lookupType);
//just some pattern nonsense to wire up the unit of work
LookupTable.SetupUOW(uow);
//make sure to cast it into something you can work with ASAP
var data = ((IQueryable<LookupTableBase>)LookupTable.All).OrderByDescending(l => l.IsVisible).ThenBy(l => l.SortOrder);
var list = from li in data
select new LookupItemDTO
{
Id = li.Id,
Description = li.Description,
Display = li.Display,
SortOrder = li.SortOrder,
IsVisible = li.IsVisible
};
return list.ToList();
}
キーを使用すると、が動的にテーブルを照会することができるということですが、それはより高いレベルでそれを行う方が良いでしょう。また、あなたとあなたのユーザーの入力との間に何らかの間接的な関係があります。リストからテーブルを選択させ、そのテーブルのIDを使用して名前を検索します。ここで私の解決策は、ルックアップテーブル定義テーブルを持っていることです。すべての動的クエリはそこから開始します最初にとし、その定義テーブルの値を使用して必要な型を構築します。
関連する問題
- 1. オブジェクト宣言での汎用宣言の使用方法(例:HashMap <Integer、Integer>)
- 2. フィールドの宣言方法は?
- 3. スコープの宣言方法は?
- 4. 方法「日」はクラス宣言
- 5. `宣言`宣言を元に戻す方法は?
- 6. C++テンプレートクラスの宣言方法
- 7. ジェネリック型の宣言方法
- 8. boost unordered_multimapの宣言方法
- 9. Zend_Db_Table_Rowデータベーステーブルの宣言方法は?
- 10. DTD要素の宣言方法は?
- 11. JAVA、配列値の宣言方法は?
- 12. 独立変数の宣言方法は?
- 13. Int64定数の宣言方法は?
- 14. JAXBElement <Byte>宣言
- 15. DbSet <T>の追加アクションの観察方法?
- 16. LINQ:IEnumerable [AnonymousType]を宣言する方法は?
- 17. 何が:<>関数宣言では?
- 18. 前方宣言
- 19. 前方宣言
- 20. 前方宣言
- 21. std :: unique_ptrの宣言方法とその使用方法は?
- 22. C#ジェネリックメソッド:この種の宣言方法?
- 23. アコーディオンでのzの宣言方法
- 24. ユニットテストモックDbContext DbSet <>がnull
- 25. マニフェストで宣言するunregisterReceiverの方法
- 26. COMオブジェクトの理解と宣言方法
- 27. テンプレートクラスのテンプレートを宣言する方法
- 28. 汎用宣言型の認識方法
- 29. Grand Central Dispatchの宣言方法
- 30. レシーバータイプは前方宣言
何を試しましたか?あなたの特定のユースケースは何ですか?私はコンテキスト内ですべてを明示的に定義しておき、異なるレベルで動的な処理を行う方がよいと思います。 – kettch