2016-09-20 15 views
0

データベースに動的オブジェクトを保存します。データベーステーブル名は動的に設定されます。だからクラスは一切ありません。設定C#動的オブジェクトの型名

private static dynamic CreateModel() 
    { 
     var model = string.Format("{{'id': '{0} - {1}', 'name':' Path - ', 'length':'{2}' }}", Guid.NewGuid(), DateTime.Now,new Random().NextDouble() * 10); 

     return JsonConvert.DeserializeObject(model); 
    } 

これは動的オブジェクトを作成します。そして、これをエンティティ・フレームワークの汎用リポジトリに追加します。

using (var repository = new EFRepository(new Context())) 
{ 
    repository.SaveOrUpdate<????>(CreateModel()) 
} 

タイプ名を設定できません。私はここでランダムな名前を設定することができます。

repository.SaveOrUpdate<T>が一般的な方法である)

+0

あなたのメソッドシグネチャはジェネリック型パラメータ –

+1

を受け入れませんジェネリックを使用している場合は、ある時点で特定の 'T'を導入する必要があります。あなたが 'T 'にも逆直列化できない理由は何ですか? –

+0

エンティティがすべて基底型から継承している場合は、 'Reflection'を使うか、基本型を使用します。 – Rahul

答えて

0

あなたはそのようなEFを使用することはできません。

dynamicは何でもかまいませんので、SaveOrUpdateメソッドを動的に渡すことはできません。String、IntまたはObjectにすることができます。そしてコンパイラは、dynamicのタイプはコンパイル時に解決されず実行時に解決されるため、アプリケーションを実行するまでこれを知ることはありません。

画像はできるだけジェネリックで<T>でダイナミックを使うことはできませんが、Tは参照であり、実行時にダイナミックに解決する必要があるからです。

私はOOを使用して、動的オブジェクトを構築するためのファクトリを持つ基本クラスを作成し、動的の代わりにこの基本クラスを使用することをお勧めします。