C# EF6:实体类型不是当前上下文的模型的一部分

C# EF6:实体类型不是当前上下文的模型的一部分,c#,asp.net,entity-framework,ef-code-first,code-first,C#,Asp.net,Entity Framework,Ef Code First,Code First,我们的系统由几个组件组成。其中一个包含包含DbContext初始化的数据访问层 其他部件(项目)包含一些模型类。在我们的例子中,模型类是由属性修饰的每个类 因此,在OnModelCreating方法中,我做了如下操作: modelBuilder.Types() .Where(type => type.GetCustomAttributes(false).OfType<TablePrefixAttribute>().Any()) .

我们的系统由几个组件组成。其中一个包含包含DbContext初始化的数据访问层

其他部件(项目)包含一些模型类。在我们的例子中,模型类是由属性修饰的每个类

因此,在
OnModelCreating
方法中,我做了如下操作:

modelBuilder.Types()
            .Where(type => type.GetCustomAttributes(false).OfType<TablePrefixAttribute>().Any())
            .Configure(config => config.ToTable(GetTableName(config.ClrType)));
modelBuilder.Entity<...>().ToTable("...")
如果我将断点放在where方法上,则导致错误的类决不在此枚举中。对于其他一些类型,这非常有效

我知道我可以做一些事情,比如:

modelBuilder.Types()
            .Where(type => type.GetCustomAttributes(false).OfType<TablePrefixAttribute>().Any())
            .Configure(config => config.ToTable(GetTableName(config.ClrType)));
modelBuilder.Entity<...>().ToTable("...")
modelBuilder.Entity().ToTable(“…”)
这样错误就消失了,但这正是我不想做的。我们使用严格的命名约定,这允许我们从类名(简单地说)中获取表名。所以每次我决定添加一个表和类时,我不想在任何地方注册它

我对此感到困惑:
modelBuilder.types()
中列出了哪些类型?为什么有些课程有,而有些课程没有

如果我在建模创建中的
中放置断点,则会加载包含某些模型类的所有程序集


我该怎么做才能使映射正常工作?

当您添加实体类(和表)时,您是否也向您的
DbContext
添加相应的
DbSet
?@IvanStoev:不,我们使用soem更高级别的抽象。但在最底层,有一个包含一组通用方法的存储库,几乎所有这些方法都指向:
context.set().someMethod()
。为每种类型创建一个
DbSet
,对我来说似乎类似于以上述方式注册它。然而,
DbSet
是EF用来发现实体类的标准之一。第二个是发现的实体类的导航属性。第三个是
modelBuilder.Entity
call。仅此而已:)我不知道如果你没有任何一个实体,你是如何得到单个实体的映射的。@IvanStoev:看来你是对的!我目前的观点是,所有的“工作类”都包含在模型中,这是因为一些导航属性链是从具有
.Entity
的类型在其程序集中调用somewehre而来的。