我正在使用Entity Framework 4和Model First方法 .
我启动了项目,设计了实体并生成了数据库 . 一切都很好 .
然后我需要回去为我的模型添加另一个实体 . 但是,当我将实体拖到EDMX时,我收到此错误:
好的!我只需要将Entity1映射到一个表..但是嘿!我正在使用Model First方法,我希望它在生成DDL时为我创建表 .
我该如何解决此错误?
这是因为EF4以模型优先的方式工作 .
首次创建模型优先模型时,它处于SSDL不存在的状态 . 您可以拖动实体,关联它们等等,但是,如果您查看EDMX文件上的SSDL,您将看到没有任何实体在SSDL中具有关联的存储表 .
单击 Generate Database From Model 上下文菜单项时,这会更改 . 令人困惑的部分是,此操作不仅仅是生成DDL脚本 . 实际上,它会更改EDMX文件以包含SSDL信息 . 从此时起,EDMX文件将进入一种状态,其中designer / CSDL中的每个实体都必须映射到SSDL中的实体 . 如果没有映射,则会触发编译时错误:
Generate Database From Model
没有为以下EntitySet / AssociationSet指定映射 - (EntityName)
另一个有趣的事实是,它不是那种会阻止编译的错误 . 它确实会生成输出类库 . 它不应该是一个警告或什么?
为防止出现此错误,插入新实体后所需要做的就是再次 Generate Database From Model . 这将更新SSDL并修复映射 .
EDIT
如果您不使用模型优先并且“从数据库更新”,则在删除数据库服务器中的表的情况下也会出现此错误 . 这是因为Entity Framework不会自动为您删除实体 . 手动删除实体,错误将消失 .
我发现我得到了同样的错误,因为我忘了在两个实体之间创建关联后创建引用约束 .
错误3027:没有为以下EntitySet / AssociationSet指定映射...“ - 实体框架令人头疼
如果您正在使用实体框架开发模型,那么您可能会遇到这个恼人的错误:
错误3027:没有为以下EntitySet / AssociationSet指定映射[实体或关联名称]
当EDM上的一切看起来都很好时,这可能没有意义,但那是因为这个错误通常与EDM无关 . 应该说的是“重新生成数据库文件” .
你看,实体在构建期间检查SSDL和MSL,所以如果你刚刚更改了EDM但没有使用 Generate Database Model... ,那么它会抱怨你的sql脚本中缺少了东西 .
所以,简而言之,解决方案是:“如果您正在进行模型优化开发,那么每次更新EDM后都不要忘记 Generate Database Model . 我希望您的问题得到解决” .
在我的例子中,另一个开发人员从底层数据库中删除了一些表 . 当我意识到这一点,并从实体中删除这些表时,问题就解决了 . 并不像听起来那么明显 .
我遇到了同样的错误,但我没有使用模型优先 . 事实证明,我的EDMX文件包含对表的引用,即使它没有出现在设计器中 . 有趣的是,当我在Visual Studio(2013)中对表名进行文本搜索时,找不到该表 .
为了解决这个问题,我使用外部编辑器在EDMX文件中查找对违规表的引用,然后(小心地)删除对表的所有引用 . 我很遗憾地说,我不知道EDMX文件最初是如何进入这种状态的 .
我有一个表更改,它创建了另一个实体,最后有一个数字1(例如 MyEntity1 和 MyEntity ),由edmx模型浏览器确认 . 关于这两个实体的东西一起混淆了处理 .
MyEntity1
MyEntity
拆除 table 并重新添加它固定它 .
请注意,如果连接了TFS,则在删除后执行edmx的签入 . 然后,只有这样才能得到最新的,并在一个明确的两步过程中重新添加它 . 否则TFS会混淆删除和重新添加相同的命名实体,这似乎会导致问题 .
对我来说更快捷的方法就是删除表格并重新添加 . 它自动映射它们 . :)
对于那些正在使用 Database First 方法的人,只需右键单击 .edmx 文件并选择 Generate Database From Model... ,就可以在插入新实体之后再次执行 Generate Database From Model
Database First
.edmx
Generate Database From Model...
从数据库中删除表时出现此错误 . 通过右键单击EDMX图解决方案,转到“属性”,从“属性”窗口的列表中选择表,然后从图中删除它(使用删除键) .
转到解决方案资源管理器,单击“搜索”按钮
请选中 Search within file content 和 Search External Files
Search within file content
Search External Files
键入映射无法识别的实体名称 .
删除与问题相关的所有文件 . 这些可能会以相同的缺失实体命名 . 请勿删除文件中包含Context类名的任何文件,特别是如果它们的扩展名为.cs或.tt . 在Context .cs文件中 .
删除引用缺失实体的所有代码行 . 它们看起来像这样:
public virtual DbSet< Entity1> Entity1 { get; set; }
此错误对于从数据库中删除的表是常见的 .
当一个表删除数据库中的表,或者只是更改EF映射数据库的 web.config.connectionStrings 时,指向一个新表而不是用于生成原始映射的表是问题 .
web.config.connectionStrings
这是新的数据库,这些具有3027错误的实体不存在 .
当我尝试为存储过程创建自定义结果并假设它必须是一个实体时,我遇到了错误 .
解决方案是我在模型浏览器中创建了一个复杂类型,并将其分配给“编辑函数导入” .
我会在这里添加它,因为看起来这个问题是当你收到此错误时谷歌带你的地方 .
我已经正确设置了一切(基数和依赖属性),但无法弄清楚为什么我一直收到错误 . 最后发现,EF在依赖表中生成了一个列(table_tablecolumn)并且它与表没有任何关系,因此没有指定映射 . 我不得不删除EDMX文件中的列并重建解决问题的解决方案 . 我正在使用DB方法 .
从数据库更新模型对我不起作用 .
我不得不删除冲突的实体,然后从数据库执行更新模型,最后重建解决方案 . 在那之后,一切正常 .
为其他人分享这个 . 就我而言,我们正在开发一个共享的MVC解决方案,并使用一个通用模块来表示我们用于下拉列表的表 . 我通过添加新表更新实体模型时收到错误 . 事实证明,当我更新EDMX时,它可能更新了我对数据库的权限访问,导致无法访问该特定表格给我 no mapping specified .
no mapping specified
只需重新添加并授予我的用户访问权限即可解决问题 .
14 回答
这是因为EF4以模型优先的方式工作 .
首次创建模型优先模型时,它处于SSDL不存在的状态 . 您可以拖动实体,关联它们等等,但是,如果您查看EDMX文件上的SSDL,您将看到没有任何实体在SSDL中具有关联的存储表 .
单击
Generate Database From Model
上下文菜单项时,这会更改 . 令人困惑的部分是,此操作不仅仅是生成DDL脚本 . 实际上,它会更改EDMX文件以包含SSDL信息 . 从此时起,EDMX文件将进入一种状态,其中designer / CSDL中的每个实体都必须映射到SSDL中的实体 . 如果没有映射,则会触发编译时错误:另一个有趣的事实是,它不是那种会阻止编译的错误 . 它确实会生成输出类库 . 它不应该是一个警告或什么?
为防止出现此错误,插入新实体后所需要做的就是再次
Generate Database From Model
. 这将更新SSDL并修复映射 .EDIT
如果您不使用模型优先并且“从数据库更新”,则在删除数据库服务器中的表的情况下也会出现此错误 . 这是因为Entity Framework不会自动为您删除实体 . 手动删除实体,错误将消失 .
我发现我得到了同样的错误,因为我忘了在两个实体之间创建关联后创建引用约束 .
如果您正在使用实体框架开发模型,那么您可能会遇到这个恼人的错误:
当EDM上的一切看起来都很好时,这可能没有意义,但那是因为这个错误通常与EDM无关 . 应该说的是“重新生成数据库文件” .
你看,实体在构建期间检查SSDL和MSL,所以如果你刚刚更改了EDM但没有使用 Generate Database Model... ,那么它会抱怨你的sql脚本中缺少了东西 .
所以,简而言之,解决方案是:“如果您正在进行模型优化开发,那么每次更新EDM后都不要忘记 Generate Database Model . 我希望您的问题得到解决” .
在我的例子中,另一个开发人员从底层数据库中删除了一些表 . 当我意识到这一点,并从实体中删除这些表时,问题就解决了 . 并不像听起来那么明显 .
我遇到了同样的错误,但我没有使用模型优先 . 事实证明,我的EDMX文件包含对表的引用,即使它没有出现在设计器中 . 有趣的是,当我在Visual Studio(2013)中对表名进行文本搜索时,找不到该表 .
为了解决这个问题,我使用外部编辑器在EDMX文件中查找对违规表的引用,然后(小心地)删除对表的所有引用 . 我很遗憾地说,我不知道EDMX文件最初是如何进入这种状态的 .
我有一个表更改,它创建了另一个实体,最后有一个数字1(例如
MyEntity1
和MyEntity
),由edmx模型浏览器确认 . 关于这两个实体的东西一起混淆了处理 .拆除 table 并重新添加它固定它 .
请注意,如果连接了TFS,则在删除后执行edmx的签入 . 然后,只有这样才能得到最新的,并在一个明确的两步过程中重新添加它 . 否则TFS会混淆删除和重新添加相同的命名实体,这似乎会导致问题 .
对我来说更快捷的方法就是删除表格并重新添加 . 它自动映射它们 . :)
对于那些正在使用
Database First
方法的人,只需右键单击.edmx
文件并选择Generate Database From Model...
,就可以在插入新实体之后再次执行Generate Database From Model
从数据库中删除表时出现此错误 . 通过右键单击EDMX图解决方案,转到“属性”,从“属性”窗口的列表中选择表,然后从图中删除它(使用删除键) .
转到解决方案资源管理器,单击“搜索”按钮
请选中
Search within file content
和Search External Files
键入映射无法识别的实体名称 .
删除与问题相关的所有文件 . 这些可能会以相同的缺失实体命名 . 请勿删除文件中包含Context类名的任何文件,特别是如果它们的扩展名为.cs或.tt . 在Context .cs文件中 .
删除引用缺失实体的所有代码行 . 它们看起来像这样:
此错误对于从数据库中删除的表是常见的 .
当一个表删除数据库中的表,或者只是更改EF映射数据库的
web.config.connectionStrings
时,指向一个新表而不是用于生成原始映射的表是问题 .这是新的数据库,这些具有3027错误的实体不存在 .
当我尝试为存储过程创建自定义结果并假设它必须是一个实体时,我遇到了错误 .
解决方案是我在模型浏览器中创建了一个复杂类型,并将其分配给“编辑函数导入” .
我会在这里添加它,因为看起来这个问题是当你收到此错误时谷歌带你的地方 .
我已经正确设置了一切(基数和依赖属性),但无法弄清楚为什么我一直收到错误 . 最后发现,EF在依赖表中生成了一个列(table_tablecolumn)并且它与表没有任何关系,因此没有指定映射 . 我不得不删除EDMX文件中的列并重建解决问题的解决方案 . 我正在使用DB方法 .
从数据库更新模型对我不起作用 .
我不得不删除冲突的实体,然后从数据库执行更新模型,最后重建解决方案 . 在那之后,一切正常 .
为其他人分享这个 . 就我而言,我们正在开发一个共享的MVC解决方案,并使用一个通用模块来表示我们用于下拉列表的表 . 我通过添加新表更新实体模型时收到错误 . 事实证明,当我更新EDMX时,它可能更新了我对数据库的权限访问,导致无法访问该特定表格给我
no mapping specified
.只需重新添加并授予我的用户访问权限即可解决问题 .