目的:
我需要获取实体的dbset名称,例如typeof(UserAccount) = "UserAccounts"。但是在运行时,我需要循环的通用类型,并且不知道示例“UserAccount”,只知道typeof中的“name”。
我已创建了一个DbContext和一些实体。我已经谷歌搜索了一段时间,但由于类型转换,似乎无法为我工作?
请参见本描述底部的方法GetDbSetName。
我对这个EF的东西还很新-所以请帮助我解决我的问题。
问题如下,使用 Type 时出现问题 - 如果我使用 "UserAccount",它可以正常工作并返回 "UserAccounts"。 但是在运行时,由于我处于一系列类型的循环中,我没有 "UserAccount"。 我只有 Type 列表提供了 e。
我已创建了一个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;
}
问题如下,使用 Type 时出现问题 - 如果我使用 "UserAccount",它可以正常工作并返回 "UserAccounts"。 但是在运行时,由于我处于一系列类型的循环中,我没有 "UserAccount"。 我只有 Type 列表提供了 e。
public static loopList()
{
List<Type> modelListSorted = ModelListSorted();
foreach (Type currentType in modelListSorted)
{
string s = DataHelper.GetDbSetName(currentType, db);
}
}
这里有一个方法让我挑战;-) 意思是编译错误。 说我缺少一个程序集? 我知道这很伪代码,但能否顺利完成?
public static string GetDbSetName(Type parmType, MyEntities db)
{
string dbsetname = (db as IObjectContextAdapter).ObjectContext.CreateObjectSet<parmType>().EntitySet.Name;
return dbsetname;
}
var objectSet = createObjectSetMethodInfo.MakeGenericMethod(entityType).Invoke(oc, null);
异常信息:{"对象与目标类型不匹配。"} - pladekuskenvar entitySet = pi.GetValue(objectSet) as EntitySet;
异常信息: {"对象不匹配目标类型。"} 你能帮忙解决这个问题吗? - pladekuskenvar entitySet = pi.GetValue(objectSet) as EntitySet;
返回了 null。 在调试时,我可以看到用于 GetValue 方法的 objectSet 中的值? - pladekusken