私は現在、ネストされたエンティティ(エンティティフレームワーク)を使用するように適応しているこのコードを持っています。2 つの子エンティティである 2 つのプロパティを含むエンティティがあります。
最初のステップは、両方のクラスのメタデータを読み取り、最初のクラスから始めて、プロパティのリストを作成することでした。これで完成です。次に、オブジェクトを繰り返し処理して、DataBinding を実行するための適切なプロパティを見つける必要があります。
これは私が現在持っているものです:
変数の例:
datasource = namespace.A
propriete = {System.Nullable`1[System.Int32] count}
propriete.DeclaringType {Name = "prop2" FullName = "Namespace.Metadata.prop2"}
コード:
if (this.datasource != null)
{
var y = (T)this.datasource;
var propList = typeof(T).GetProperties();
if (propList.ToList().Contains(propriete))
{
TextBox.Text = DataBinder.Eval(y, propriete.Name).ToString();
}
else
{
TextBox.Text = ":( need child-support!";
}
}
私の主な問題は、オブジェクトの型が実行時 (Type T) まで不明であるため、自分のフィールドを見つける方法がわからないことです。
クイックモデル:
Class A {
public B prop1;
public C prop2;
}
Class B {
int count;
string name;
}
Class C {
int count;
string name;
}
A.prop1.count = 1;
A.prop1.name = "a";
A.prop2.count = 2;
A.prop2.name = "b";
現在、私のプロパティ名はすべて一意 (カウント/名前よりも具体的) ですが、ある時点でそれらが同じ (カウント/名前) になることを期待しています。
固有のものは、おそらく DeclaringType/ReflectedType で一意でない名前を「フィルタリング」する必要があります。
一意の名前を考慮したブルート フォース ソリューションは、エレガントではありませんが、受け入れられる可能性があります。
余分な問題:メインクラスを使用しながら、名前空間propriete
に含まれる別の部分クラスを使用します。metadata
datasource
(...そして、このシステムが何をするかについて興味がある場合:このmetadata.entity dataAttributeに基づくエンティティに基づいて、(.netコントロールを使用して)htmlテーブルを構築します。)