// 這一個洗掉方法,有好多個物體物件,就要寫好多個,有什么方式可以擴展或復用呢?
public ActionResult Delete(int id)
{
//通過ID查詢資料,洗掉。
var entity = DataContext.Category.Where(a => a.PK_ID == id).FirstOrDefault();
DataContext.Category.Remove(entity);
var res = DataContext.SaveChanges()
if (res > 0)
{
return Json(true, JsonRequestBehavior.AllowGet);
}
return Json(false, JsonRequestBehavior.AllowGet);
}
//想寫成,前端AJAX過傳一個物體名稱,因為是前端呼叫。
public ActionResult Delete(int id,string modelType)
{
//可是這個modelType是字串,后面的where條件沒法寫。
var entity = DataContext.Category.Where(a => a.PK_ID == id).FirstOrDefault();
//哪位有什么辦法或高招指點一下呢?
}
uj5u.com熱心網友回復:
泛型了解下protected override T delete<T>(T entity)
{
return _context.Set<T>().Remove(entity);
}
uj5u.com熱心網友回復:
DbContext _context=new DbContext(connectionString);uj5u.com熱心網友回復:
用泛型感覺行通的的。泛型還是要指定類。前臺呼叫只能是轉字串,AJAX不可能轉型別,uj5u.com熱心網友回復:
我的做法是把增刪改查封裝進物件內部,ActionResult 方法根據id 用工廠去獲取物件,然后呼叫物件 delete,那樣你的上家就穩定了,你把操作都寫死在 ActionResult 還有什么擴展可言
uj5u.com熱心網友回復:
我的是有封裝的,可你這樣每個類的物件,是不是都要寫一個洗掉方法?然后把id去向工廠獲取物件。這樣還是會有很多相同的東西。
我現在是想,每個類的洗掉方法共用一人,而不是每個類創建一個ActionResult的洗掉方法。這樣一個專案會太多的相同的代碼。
uj5u.com熱心網友回復:
這好像不是一個很困難的事情。你創建一個 controller的基類
然后通過泛型實作crud的基本操作。
uj5u.com熱心網友回復:
可以泛型抽象繼承的嘛,怎么會重復呢? 操作寫在泛型父類 宣告一下 virtual 然后派生不就好了,面向物件不都是這樣的嗎
uj5u.com熱心網友回復:
這好像不是一個很困難的事情。
你創建一個 controller的基類
然后通過泛型實作crud的基本操作。
對,所有控制器繼承基類,基類一個洗掉方法,前臺呼叫一個這個基數方法是可以呼叫。但泛型的前提是,你呼叫泛型的時候,你是要轉入實際的內類給他。這個物體的型別由誰轉?我想解決的是,子類不要再創建方法呼叫父類的洗掉方法。這樣還是會有相同的代碼,第個子類都要呼叫一次基類的洗掉方法了。還是有很多相同的代碼。
uj5u.com熱心網友回復:
泛型,泛型了解下
protected override T delete<T>(T entity)
{
return _context.Set<T>().Remove(entity);
}
引數可以再加一個 keyName與keyValue 就只是呼叫的地方每個物體傳入不同而已了。洗掉本身操作是完全可以重用的。
uj5u.com熱心網友回復:
泛型,
泛型了解下
protected override T delete<T>(T entity)
{
return _context.Set<T>().Remove(entity);
}
引數可以再加一個 keyName與keyValue 就只是呼叫的地方每個物體傳入不同而已了。洗掉本身操作是完全可以重用的。
是的,我想解決的是呼叫方,有太多地方呼叫泛型方法來洗掉,所以想一個辦法來解決。不用寫太多的呼叫方
uj5u.com熱心網友回復:
泛型,
泛型了解下
protected override T delete<T>(T entity)
{
return _context.Set<T>().Remove(entity);
}
引數可以再加一個 keyName與keyValue 就只是呼叫的地方每個物體傳入不同而已了。洗掉本身操作是完全可以重用的。
是的,我想解決的是呼叫方,有太多地方呼叫泛型方法來洗掉,所以想一個辦法來解決。不用寫太多的呼叫方
泛型誰都知道!T型別 只能靜態編譯,不能動態,就是說你不能根據ajax 去選擇這個T,這個T 一定要預先定義好的,既然這樣你只能包一層,或者用反射 ! ajax 傳遞類名,然后反射出物體 再用ef 去洗掉,如果要引數的就抽象屬性,不過這樣擴展有限,治標不治本
uj5u.com熱心網友回復:
這好像不是一個很困難的事情。
你創建一個 controller的基類
然后通過泛型實作crud的基本操作。
對,所有控制器繼承基類,基類一個洗掉方法,前臺呼叫一個這個基數方法是可以呼叫。但泛型的前提是,你呼叫泛型的時候,你是要轉入實際的內類給他。這個物體的型別由誰轉?我想解決的是,子類不要再創建方法呼叫父類的洗掉方法。這樣還是會有相同的代碼,第個子類都要呼叫一次基類的洗掉方法了。還是有很多相同的代碼。
你可以看一下我之前寫的博客,
主要是這句話,可以把泛型加入到dbcontext背景關系的管理
dbEF.Entry<T>(entity)
至于洗掉方法,其實也很方便,你可以傳入指定的<T,S>2個泛型,
T指代型別,S只帶主鍵id的型別。
不過你也可以不設定S。(我是由于當時的專案中存在 id和 uuid,所以需要傳入泛型)
https://blog.csdn.net/hanjun0612/article/details/62887466
uj5u.com熱心網友回復:
試試tt模板?uj5u.com熱心網友回復:
不能直接下載uj5u.com熱心網友回復:
泛型+反射。如果你的API 都是 XXXXController XXXX = 物體類名的話 可以通過 反射 根據XXXXController 名字 找到 物體類的名字 然后創建一個型別傳遞過去 。 然后就是 把 CRUD的部分 像樓上說的 封裝成泛型。然后你的物體類還必須 滿足一些要求 比如說 主鍵都是一樣的名字 物體類去繼承一個BASEMODEL.轉載請註明出處,本文鏈接:https://www.uj5u.com/net/56868.html
標籤:C#
