Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 为什么会出现此错误:没有为以下EntitySet/AssociationSet-Entity1指定映射?_.net_Entity Framework_Entity Framework 4 - Fatal编程技术网

.net 为什么会出现此错误:没有为以下EntitySet/AssociationSet-Entity1指定映射?

.net 为什么会出现此错误:没有为以下EntitySet/AssociationSet-Entity1指定映射?,.net,entity-framework,entity-framework-4,.net,Entity Framework,Entity Framework 4,我使用实体框架4和模型优先的方法 我启动了项目,设计了实体并生成了数据库。一切都很顺利 然后我需要返回并将另一个实体添加到我的模型中。但是,当我将实体拖动到EDMX时,会出现以下错误: 好的!我只需要将Entity1映射到一个表。。但是嘿!我使用模型优先的方法,我希望它在生成DDL时为我创建表 如何解决此错误?这是因为EF4首先处理模型的方式 当您第一次创建模型优先模型时,它处于SSDL不存在的状态。您可以拖动实体、关联它们等等,但是,如果查看EDMX文件上的SSDL,您将看到没有任何实体在S

我使用实体框架4和模型优先的方法

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

然后我需要返回并将另一个实体添加到我的模型中。但是,当我将实体拖动到EDMX时,会出现以下错误:

好的!我只需要将Entity1映射到一个表。。但是嘿!我使用模型优先的方法,我希望它在生成DDL时为我创建表


如何解决此错误?

这是因为EF4首先处理模型的方式

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

当您单击
从模型生成数据库
上下文菜单项时,情况会发生变化。令人困惑的是,这个操作不仅仅是生成一个DDL脚本。实际上,它更改了EDMX文件以包含SSDL信息。从这一点开始,EDMX文件将进入这样一种状态:设计器/CSDL中的每个实体都必须映射到SSDL中的一个实体。如果没有映射,将触发编译时错误:

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

另一个有趣的事实是,这种错误不会阻止编译。实际上,它将生成输出类库。这不是一个警告吗

为了防止此错误,在插入新实体后,您所要做的就是再次从模型生成数据库。这将更新SSDL并修复映射

编辑


如果您没有首先使用模型,并且“从数据库更新”,那么在DB Server中删除表的情况下也会出现此错误。这是因为实体框架不会自动为您删除实体。手动删除实体,错误将消失。

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

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


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

在我的例子中,另一个开发人员已经从基础数据库中删除了一些表。当我意识到这一点,并从实体中删除这些表时,问题就解决了。没有听起来那么明显

错误3027:未为以下EntitySet/AssociationSet指定映射…-实体框架

如果您正在使用实体框架开发模型,则有时可能会遇到以下恼人的错误:

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

当EDM上的一切正常时,这可能没有意义,但这是因为此错误通常与EDM无关。它应该说的是“重新生成数据库文件”

您可以看到,实体在构建过程中会检查SSDL和MSL,因此如果您只是更改了EDM,但没有使用生成数据库模型…,那么它会抱怨您的sql脚本中缺少内容

因此,简而言之,解决方案是: “如果您正在进行模型优先开发,请不要忘记在每次更新EDM后生成数据库模型。我希望你的问题得到解决”

  • 转到解决方案资源管理器,单击“搜索”按钮
  • 保持选中状态,在文件内容中搜索
    搜索外部文件
  • 键入映射无法识别的实体名称
  • 删除与此问题相关的所有文件。这些文件可能会以相同的缺失实体命名。不要删除文件中具有上下文类名的任何文件,特别是当其扩展名为.cs或.tt.时
  • 删除引用缺少实体的所有代码行。它们将如下所示:

    public virtual DbSet< Entity1> Entity1 { get; set; }
    
    公共虚拟DbSetEntity1{get;set;}
  • 此错误在从数据库中删除的表中很常见

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


    这是一个新的数据库,这些带有3027错误的实体不存在。

    当我从数据库中删除一个表时出现此错误。通过右键单击EDMX图表,转到“属性”,从“属性”窗口的列表中选择表,然后删除它(使用delete键),解决了此问题从图表中。

    我对表格进行了更改,并创建了另一个实体,其末尾带有数字1(如
    MyEntity1
    MyEntity1
    ),这一点得到了edmx模型浏览器的确认。有关这两个实体的某些信息混淆了处理过程

    删除表并重新添加它修复了它



    请注意,如果TFS已连接,则在删除后签入edmx in。然后,只有这样,才能获得最新的并在确定的两步过程中重新添加。否则TFS会与相同命名实体的删除和重新添加混淆,这似乎会导致问题。

    对我来说,一个更快的方法是删除t