獲取dbset名稱目的: 我需要獲取實體的dbset名稱 typeof(UserAccount)=「UserAccounts」。 但是在運行時我需要一個通用類型的循環,因此不知道示例「UserAccount」。 只有來自typeof的「名稱」?EF在運行時從類型
我用一些實體創建了一個DbContext。 我一直在谷歌搜索了一段時間,但它似乎並沒有爲我工作,因爲類型轉換?
請參閱我的方法GetDbSetName在本說明的底部。
我在這個EF東西很新的 - 所以幫助我的問題,請配有下面;-)
public class MyEntities : DbContext
{
public DbSet<UserAccount> UserAccounts { get; set;}
public DbSet<UserRole> UserRoles { get; set; }
public DbSet<UserAccountRole> UserAccountRoles { get; set; }
}
描述定義類型的列表來控制輸出:
public static List<Type> ModelListSorted()
{
List<Type> modelListSorted = new List<Type>();
modelListSorted.Add(typeof(UserRole));
modelListSorted.Add(typeof(UserAccountRole));
modelListSorted.Add(typeof(UserAccount));
return modelListSorted;
}
問題在於使用類型 - 如果我使用「UserAccount」它工作,我得到「UserAccounts」。 但我在運行時沒有「UserAccount」,因爲我處於一系列類型的循環中。 我只有類型列表給予電子
public static loopList()
{
List<Type> modelListSorted = ModelListSorted();
foreach (Type currentType in modelListSorted)
{
string s = DataHelper.GetDbSetName(currentType, db);
}
}
這裏是方法給我CHALLANGES ;-) 含義不進行編譯。 說我缺少一個程序集? 我知道這很僞,但這可以順利完成嗎?
public static string GetDbSetName(Type parmType, MyEntities db)
{
string dbsetname = (db as IObjectContextAdapter).ObjectContext.CreateObjectSet<parmType>().EntitySet.Name;
return dbsetname;
}
嗨@GertArnold。感謝您的回覆 - 好的和簡單的思考! 我得到錯誤在行:'var objectSet = createObjectSetMethodInfo.MakeGenericMethod(entityType).Invoke(oc,null);' 異常消息:{「對象不符合目標類型。」} – pladekusken 2014-10-19 16:09:04
我認爲問題是在這裏:var oc =(dbContextInstance as IObjectContextAdapter).ObjectContext;' 正如我們所期望的System.Data.Objects.ObjectContext,但獲取System.Data.Entity.Core.ObjectContext? - 但我不知道如何解決它? – pladekusken 2014-10-19 16:09:30
此行'var entitySet = pi.GetValue(objectSet)爲EntitySet;' 異常消息:{「對象與目標類型不匹配。」} 您是否也可以幫助解決此問題? – pladekusken 2014-10-19 16:50:28