首页 文章

为什么我收到此错误:没有为以下EntitySet / AssociationSet指定映射 - Entity1?

提问于
浏览
86

我正在使用Entity Framework 4和Model First方法 .

我启动了项目,设计了实体并生成了数据库 . 一切都很好 .

然后我需要回去为我的模型添加另一个实体 . 但是,当我将实体拖到EDMX时,我收到此错误:

enter image description here

好的!我只需要将Entity1映射到一个表..但是嘿!我正在使用Model First方法,我希望它在生成DDL时为我创建表 .

我该如何解决此错误?

14 回答

  • 1

    这是因为EF4以模型优先的方式工作 .

    首次创建模型优先模型时,它处于SSDL不存在的状态 . 您可以拖动实体,关联它们等等,但是,如果您查看EDMX文件上的SSDL,您将看到没有任何实体在SSDL中具有关联的存储表 .

    单击 Generate Database From Model 上下文菜单项时,这会更改 . 令人困惑的部分是,此操作不仅仅是生成DDL脚本 . 实际上,它会更改EDMX文件以包含SSDL信息 . 从此时起,EDMX文件将进入一种状态,其中designer / CSDL中的每个实体都必须映射到SSDL中的实体 . 如果没有映射,则会触发编译时错误:

    没有为以下EntitySet / AssociationSet指定映射 - (EntityName)

    另一个有趣的事实是,它不是那种会阻止编译的错误 . 它确实会生成输出类库 . 它不应该是一个警告或什么?

    为防止出现此错误,插入新实体后所需要做的就是再次 Generate Database From Model . 这将更新SSDL并修复映射 .

    EDIT

    如果您不使用模型优先并且“从数据库更新”,则在删除数据库服务器中的表的情况下也会出现此错误 . 这是因为Entity Framework不会自动为您删除实体 . 手动删除实体,错误将消失 .

  • 3

    我发现我得到了同样的错误,因为我忘了在两个实体之间创建关联后创建引用约束 .

  • 7

    错误3027:没有为以下EntitySet / AssociationSet指定映射...“ - 实体框架令人头疼

    如果您正在使用实体框架开发模型,那么您可能会遇到这个恼人的错误:

    错误3027:没有为以下EntitySet / AssociationSet指定映射[实体或关联名称]

    当EDM上的一切看起来都很好时,这可能没有意义,但那是因为这个错误通常与EDM无关 . 应该说的是“重新生成数据库文件” .

    你看,实体在构建期间检查SSDL和MSL,所以如果你刚刚更改了EDM但没有使用 Generate Database Model... ,那么它会抱怨你的sql脚本中缺少了东西 .

    所以,简而言之,解决方案是:“如果您正在进行模型优化开发,那么每次更新EDM后都不要忘记 Generate Database Model . 我希望您的问题得到解决” .

  • 138

    在我的例子中,另一个开发人员从底层数据库中删除了一些表 . 当我意识到这一点,并从实体中删除这些表时,问题就解决了 . 并不像听起来那么明显 .

  • 19

    我遇到了同样的错误,但我没有使用模型优先 . 事实证明,我的EDMX文件包含对表的引用,即使它没有出现在设计器中 . 有趣的是,当我在Visual Studio(2013)中对表名进行文本搜索时,找不到该表 .

    为了解决这个问题,我使用外部编辑器在EDMX文件中查找对违规表的引用,然后(小心地)删除对表的所有引用 . 我很遗憾地说,我不知道EDMX文件最初是如何进入这种状态的 .

  • 32

    我有一个表更改,它创建了另一个实体,最后有一个数字1(例如 MyEntity1MyEntity ),由edmx模型浏览器确认 . 关于这两个实体的东西一起混淆了处理 .

    拆除 table 并重新添加它固定它 .


    请注意,如果连接了TFS,则在删除后执行edmx的签入 . 然后,只有这样才能得到最新的,并在一个明确的两步过程中重新添加它 . 否则TFS会混淆删除和重新添加相同的命名实体,这似乎会导致问题 .

  • 0

    对我来说更快捷的方法就是删除表格并重新添加 . 它自动映射它们 . :)

  • 4

    对于那些正在使用 Database First 方法的人,只需右键单击 .edmx 文件并选择 Generate Database From Model... ,就可以在插入新实体之后再次执行 Generate Database From Model

  • 0

    从数据库中删除表时出现此错误 . 通过右键单击EDMX图解决方案,转到“属性”,从“属性”窗口的列表中选择表,然后从图中删除它(使用删除键) .

  • 0
    • 转到解决方案资源管理器,单击“搜索”按钮

    • 请选中 Search within file contentSearch External Files

    • 键入映射无法识别的实体名称 .

    • 删除与问题相关的所有文件 . 这些可能会以相同的缺失实体命名 . 请勿删除文件中包含Context类名的任何文件,特别是如果它们的扩展名为.cs或.tt . 在Context .cs文件中 .

    • 删除引用缺失实体的所有代码行 . 它们看起来像这样:

    public virtual DbSet< Entity1> Entity1 { get; set; }
    

    此错误对于从数据库中删除的表是常见的 .

    当一个表删除数据库中的表,或者只是更改EF映射数据库的 web.config.connectionStrings 时,指向一个新表而不是用于生成原始映射的表是问题 .

    这是新的数据库,这些具有3027错误的实体不存在 .

  • 0

    当我尝试为存储过程创建自定义结果并假设它必须是一个实体时,我遇到了错误 .

    解决方案是我在模型浏览器中创建了一个复杂类型,并将其分配给“编辑函数导入” .

    我会在这里添加它,因为看起来这个问题是当你收到此错误时谷歌带你的地方 .

  • 4

    我已经正确设置了一切(基数和依赖属性),但无法弄清楚为什么我一直收到错误 . 最后发现,EF在依赖表中生成了一个列(table_tablecolumn)并且它与表没有任何关系,因此没有指定映射 . 我不得不删除EDMX文件中的列并重建解决问题的解决方案 . 我正在使用DB方法 .

  • 0

    从数据库更新模型对我不起作用 .

    我不得不删除冲突的实体,然后从数据库执行更新模型,最后重建解决方案 . 在那之后,一切正常 .

  • 0

    为其他人分享这个 . 就我而言,我们正在开发一个共享的MVC解决方案,并使用一个通用模块来表示我们用于下拉列表的表 . 我通过添加新表更新实体模型时收到错误 . 事实证明,当我更新EDMX时,它可能更新了我对数据库的权限访问,导致无法访问该特定表格给我 no mapping specified .

    只需重新添加并授予我的用户访问权限即可解决问题 .

相关问题