1 回答
在 EF 支持 POCO 实体之前,它只支持非 POCO 实体。非 POCO 实体派生自 EntityObject 类,每个实体、复杂类型、枚举类型、成员等都必须具有 EF 特定属性,否则它们将不起作用。非 POCO 实体所在的程序集必须归属于EdmSchemaAttribute
. 如果程序集具有此属性,则 EF 知道它包含非 POCO 属性并仅查找这些属性。POCO 和非 POCO 类型不能存在于同一个程序集中。在你的情况下,你似乎有EdmSchemaAttribute
在您的项目中的某个地方定义(请注意,这是一个程序集级别属性,因此它基本上可以存在于任何文件中)。如果您只想使用 POCO 类型,只需找到该属性并将其删除。如果要混合 POCO 和非 POCO 类型,则需要在与定义非 POCO 类型不同的程序集中定义 POCO 类型(尽管我不建议混合 POCO 和非 POCO 类型)。请注意,在 EF 设计器中,非 POCO 类型曾经是 VS2010 中的默认选择(基于 EntityObject 的实体和基于 ObjectContext 的上下文)。在 VS2012 附带的设计器中,默认上下文是 DbContext,但您仍然可以将代码生成策略更改为“默认”(有趣的是,创建基于 DbContext 的上下文和 POCO 实体的默认代码生成策略称为“无”)。EdmSchemAttribute
. 在 VS2013(以及 VS2012 的OOB 版本)中,如果您的目标是 EF6,您将无法选择代码生成策略(一切都基于 T4 - 如果您真的需要 ObjectContext,您应该能够在 VS Gallery 上找到模板)。但是,如果您的目标是 EF5,您将能够选择生成非 POCO 内容的策略,但我认为它被称为 Legacy ObjectContext,而不是 T4,即 DbContext 和朋友。