2017-02-02 13 views
0

私は、Entity Frameworkの使用のために一連の関数をまとめようとしています。私はジェネリッククラスをすべて1つのルーチンに渡したいと思っています。それから、ルーチンがそれを "タイプ"してそれに応じて行動するようにします。私はClassクラスとそれをPropertyTypeと結婚させる方法を理解できないようです。不明なクラスにプロパティを動的にキャストし、C#Entity Frameworkでそのプロパティをチェックする方法は?

 public void AddUpdate(string classType, Object o) 
    { 
     //This gets the Type of my Class Object ok. 
     Type mType = Type.GetType(GetType().Namespace + "." + classType, true); 

     var meContext = new ClsContext(_ConnectionString); 

     //This retrieves the correct primary key for my the Class Object. 
     string key = FncGetPrimaryKey(meContext, classType + "s"); 

     //I've tried this as a PropertyInfo as well instead of a Var 
     var keyID = o.GetType().GetProperty(key); 

     //I've tried this as Var as well as Dynamic 
     dynamic obj = o; 

     //Now I'm stuck, because I want to evaluate the property, 
     //but I get an error "<MyClass> does not contain a reference for 'keyID' 

     if (obj.keyID == 0) //ERROR ON THIS LINE 
     { 
      meContext.Entry(o).State = EntityState.Added; 
     } 
     else 
     { 
      meContext.Entry(o).State = EntityState.Modified; 
     } 
     meContext.SaveChanges(); 
    } 

答えて

1

あなたはこのようにそれをしたいですか、なぜ私は完全には理解していなかった、が、私が思うに、私はあなたが達成しようとしているものを理解していました。これは私がいくつかの一般的なオブジェクトを追加したい場合、私は場合にそれを行う方法です。

public void AddUpdate<T>(T obj) where T : IEntity 
{ 
    using(var ctx = new ClsContext(_ConnectionString)) 
    { 
     if (obj.keyID == 0) 
     { 
      ctx.Entry(o).State = EntityState.Added; 
     } 
     else 
     { 
      ctx.Entry(o).State = EntityState.Modified; 
     } 
     ctx.SaveChanges(); 
    } 
} 

public interface IEntity 
{ 
    int keyId {get;set;} 
} 
+0

感謝します。それはスマートな答えですが、実際にコードにプラグインする方法を理解することはできませんでした。私はあなたに+1を与え、応答を感謝します。 –

1

てみてください。それを貼り付けるために時間を割いて

var keyValue = keyID.GetValue(o); 
if (keyValue.Equals(0)) {... 
+0

パーフェクト!多くのおかげで、そのトリックはあります。 –

関連する問題