如何使用泛型方法指示實體不是按名稱而是按類型來代替?您可以將結果存儲爲動態變量,以便您可以訪問其中的任何屬性。
public string GetEntityByName<TEntity>(int id)
{
using (var context = new MyContext())
{
dynamic entity = context.Set<TEntity>.Find(id);
try
{
return entity.Name;
}
catch(Exception e)
{
// Handle the situation when requested entity does not have Name property
}
}
}
或者您可以使用反射來訪問Name屬性:
public string GetEntityByName<TEntity>(int id)
{
var nameProperty = typeof(TEntity).GetProperty("Name");
if(nameProperty == null)
return null;
using (var context = new MyContext())
{
object entity = context.Set<TEntity>.Find(id);
return nameProperty.GetValue(entity) as string;
}
}
你可以使用類似上述的方法:
string name = GetEntityByName<Car>(id);
如果你堅持有作爲傳遞的實體類型字符串參數你也可以實現它:
public string GetEntityByName(int id, string entityName)
{
Type entityType = Type.GetType(entityName);
var nameProperty = entityType.GetProperty("Name");
if(nameProperty == null)
return null;
using (var context = new MyContext())
{
object entity = context.Set(entityType).Find(id);
return nameProperty.GetValue(entity) as string;
}
}
僅當GetEntityByName方法在與實體類相同的程序集和相同的名稱空間中定義時,上述方法纔有效。否則,作爲GetType方法的參數,您必須傳遞完整的類型名稱。
您是否有一些基本實體類與Name屬性定義? – haim770
不,不存在具有名稱屬性的基本實體類,但它對於許多實體很常見 –
您如何傳遞'entityName',它是簡單地作爲'class'(「Car」)的名稱,還是完整的'輸入名稱?另外,是否所有請求的實體都在同一個命名空間中? – haim770