摘要:[ASP.NET] ODataController, WebApiConfig 類別可能需要其他變更以新增此控制器的路由
WebApiConfig 類別可能需要其他變更以新增此控制器的路由,請將這些陳述式合併到 WebApiConfig 類別的 Register 方法。注意 OData URL 有區分大小寫。
加入之後 出現了這段註解
此時要到WebApiConfig 新增控制器路由
啟動Server的時候出現了錯誤
因為這個資料庫是complex types
有許多的關聯性資料
導致在呼叫Entity的時候 會有 recursive loop的情況
而且也沒有 載入 上述所說的AT09 Entity
(這邊只顯示一個,其實如果加完AT09之後還會跳出很多個Entity名稱出來,我一直嘗試到加了5個還不會正常
這時就會想到 ,難道我每一次新增就要貼一次路由嗎? (一直貼一直貼 ?
於是有了以下的方法
利用 GetClasses 取得Models 內的 Entity nameSpace 然後排除掉 DbContext
static List<Type> GetClasses(string nameSpace)
{
Assembly asm = Assembly.GetExecutingAssembly();
List<Type> namespacelist = new List<Type>();
List<Type> classlist = new List<Type>();
foreach (Type type in asm.GetTypes())
{
if (type.Namespace == nameSpace)
namespacelist.Add(type);
}
foreach (Type classname in namespacelist) {
if (classname.BaseType.Name != "DbContext")
classlist.Add(classname);
}
return classlist;
}
將原本要使用
builder.EntitySet<ATSLV02A>("ATSLV02A");
類似的語法用
取得 classlist後
foreach的方式取代掉
var classNameList = GetClasses("prj04.Models");
foreach (var cls in classNameList)
{
Type thisType = builder.GetType(); // Get your current class type
MethodInfo doSomethingInfo = thisType.GetMethod("EntitySet");
MethodInfo concreteDoSomething = doSomethingInfo.MakeGenericMethod(cls);
concreteDoSomething.Invoke(builder, new object[] { cls.Name });
}
之後新加入的 ODataController
就不需要擔心要要貼一堆東西到WebApiConfig上