2017-02-02 2 views
0

Я пытаюсь объединить ряд функций для использования Entity Framework. Идея состоит в том, что я хочу передать общие классы в одну рутину, а затем иметь подпрограмму «тип» для меня и действовать соответственно. Я не могу понять, как выйти замуж за класс со своим 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

Try:

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

Отлично! Большое спасибо, что делает трюк. –

Смежные вопросы