请帮忙! :(
我正在尝试使用CodeFirst EF。问题是它为每个域上下文(DbContext)加载了50多个表。如果我传递强名称类,那么忽略是有效的,所以编译器知道它是什么,但硬编码所有忽略将太难了。
有没有办法遍历引用的DLL中的所有类并将其传递给忽略?我的代码很接近(从帖子中获取代码)但我无法找到一种方法来传递具有Assembly信息的类类型。我离这么远很近......
Assembly pocoQMAssembly = AssemblyInformationPOCO_QM.Get;
foreach (Type typeInfo in pocoQMAssembly.GetTypes())
{
//Make sure it is not one of the classes used in DbSet<>
if (typeInfo != typeof(tbl_age_groups) ||
typeInfo != typeof(tbl_axis)
)
{
//This line will show an error on typeInfo
//Is there a way to cast it to a class in some way so it likes it?
modelBuilder.Ignore<typeInfo>();
}
}
这将使大会公开以轻松实现。
public class AssemblyInformationPOCO_QM
{
public static System.Reflection.Assembly Get
{
get
{
return typeof(AssemblyInformationPOCO_QM).Assembly;
}
}
}
非常感谢任何帮助。
谢谢,
丹尼尔
答案 0 :(得分:1)
以下是一些能够完成您所需要的代码。它找到显式包含在DbSet属性中的所有类型,然后使用它来查找模型程序集中不在DbSet中的所有类型,然后在它们上调用Ignore。
public class MyContext : DbContext
{
// DbSet properties go here
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
var dbSetTypes = this.GetType()
.GetProperties()
.Where(p => p.PropertyType.Name == "DbSet`1")
.Select(s => s.PropertyType.GenericTypeArguments.Single());
var nonDbSetTypes = typeof(MyEntityClass).Assembly // <- replace MyEntityClass with one of your types
.GetTypes()
.Except(dbSetTypes);
modelBuilder.Ignore(nonDbSetTypes);
}
}