0
我在創建通用刪除方法時遇到了麻煩,甚至不知道這是否可能。我有一個刪除方法,它將根據實體類型和行ID值(pk), 刪除數據庫中的記錄,它工作正常,但它需要事先知道類型。在某些情況下,我只能在運行時使用Object.GetType()(類似viewstate)獲取對象 的類型,這是故障開始時的情況。這裏是我知道類型的方法,有沒有辦法修改它,以便它將使用Object.GetType()而不是T?LINQ到asp.net中的實體和通用刪除方法
public void Delete<T>(long Id) where T : class,new()
{
#region PerformaneMonitor
IDbEntities Db=null;
T item=null;
try
{
Db = this.GetDatabase();
item = new T();
Type itemType = item.GetType();
EntityContainer entityContainer = Db.MetadataWorkspace.GetEntityContainer(Db.DefaultContainerName, DataSpace.CSpace);
var entity = entityContainer.BaseEntitySets.First(b => b.ElementType.Name == itemType.Name);
if (entity.ElementType.KeyMembers.Count == 0)
{
throw new Exception("Unable to delete a record witout unique id");
}
string PrimaryKeyName = entity.ElementType.KeyMembers[0].Name;
itemType.GetProperty(PrimaryKeyName).SetValue(item, Id, null);
}
catch (Exception ex)
{
Close(Db);
throw(ex);
}
this.Delete<T>(item, Db);
Close(Db);
#region PerformaneMonitor
}
所以我試圖將其轉換爲刪除(對象EntityType,長ID),但沒有運氣。
這裏是什麼樣子:
public void Delete(object target,long Id)
{
#region PerformaneMonitor
IDbEntities Db = null;
try
{
Db = this.GetDatabase();
Type itemType = (Type)target;
EntityContainer entityContainer = Db.MetadataWorkspace.GetEntityContainer(Db.DefaultContainerName, DataSpace.CSpace);
var entity= entityContainer.BaseEntitySets.First(b => b.ElementType.Name == itemType.Name);
if (entity.ElementType.KeyMembers.Count == 0)
{
throw new Exception("Unable to delete a record witout unique id");
}
string PrimaryKeyName = entity.ElementType.KeyMembers[0].Name;
itemType.GetProperty(PrimaryKeyName).SetValue(target, Id, null);
}
catch (Exception ex)
{
Close(Db);
throw (ex);
}
this.Delete(target, Db);
Close(Db);
//_method_tag_end_
#region PerformaneMonitor
}
我正在上 這條線 '對象不匹配目標類型': itemType.GetProperty(PrimaryKeyName).SetValue(目標,p鍵,NULL); 對象目標是特定類型的actaul實例,我在調用方法中從對象類型執行並使用反射並傳遞給此函數,但我仍然不知道它在運行時是何種類型。
如果有人能幫助它,將不勝感激。