Entity framework 实体框架4.0:错误113:多重性在角色中无效

Entity framework 实体框架4.0:错误113:多重性在角色中无效,entity-framework,Entity Framework,我在数据库中放置了一个新表,有4个表与它有外键关系。 我以为我以相同的方式配置了所有4个,但我得到了这个错误 错误15错误113:多重性在关系“FK_OtherLeaves_ReportCellImages”中的角色“ReportCellImage”中无效。因为依赖角色中的所有属性都可以为null,所以主体角色的多重性必须为“0..1” 为了简化我的表格 ReportCellImage表包含 ReportCellImageId字段,它位于主键中,是一个整数 OtherLeave表包含 Repor

我在数据库中放置了一个新表,有4个表与它有外键关系。 我以为我以相同的方式配置了所有4个,但我得到了这个错误

错误15错误113:多重性在关系“FK_OtherLeaves_ReportCellImages”中的角色“ReportCellImage”中无效。因为依赖角色中的所有属性都可以为null,所以主体角色的多重性必须为“0..1”

为了简化我的表格

ReportCellImage表包含 ReportCellImageId字段,它位于主键中,是一个整数

OtherLeave表包含 ReportCellImageId字段作为可为空的外键,默认值为4

其他表类似,都配置了一个外键以与ReportCellImage表联接


这是最近的更改,因此当我从数据库更新edmx文件时,为什么会出现此错误以及如何修复此错误?

如果FK可为空,则主体实体中的多重性必须为0..1-默认值在此过程中不起作用,因为您可以将null分配给FK。因此,所有从属实体必须与主体实体处于0..1-*关系。

我刚刚收到了相同的消息,这让人感到困惑,因为我在数据库中修改的表与我得到消息的表不同

我尝试将多重性0..1更改为多,但消息仍然存在,即使在“运行自定义工具”命令、清理和重建之后也是如此


通过删除EF抱怨的关系并从DB更新模型来解决此问题

右键单击EDX图中的关系。
在适当的情况下,将END1多重性更改为0..1(0或一个表名)

添加新表后,我遇到了相同的问题,我尝试了所有解决方案,包括删除关系,但都不起作用。对我有效的解决方案是完全删除模型并创建一个新模型。不要忘记删除web.config中的连接字符串,以便新EF能够使用相同的名称。

删除实体类中的实体引用,然后手动删除数据库中的引用,然后将它们一步一步地放回去解决我在完成快速解决方案后意识到的问题,即在我第一次将字段从可空改为不可空后,将上下文中的WithOptional替换为WithRequired


protectedoverride void OnModelCreating(DbModelBuilder modelBuilder)

我从模型中删除了更新的表,然后从数据库中更新模型,再次添加它,这很有帮助。

我使用数据库优先的方法创建.edmx文件。当我遇到这个问题时,我尝试了上面的几个建议,但仍然出现错误,所以我删除了.edmx文件,并从更新的数据库中刷新了整个文件

我发现,有时EF在更新现有数据库后会感到困惑,虽然找到根本原因很理想,但在工作环境(比如我的工作环境)中,花一个小时做一些事情可能是不可能的

我们的数据库是新的,而且很小,所以刷新文件很容易,而且不会花那么长时间。
问题消失了,继续前进

将Multiplicity=“1”更改为Multiplicity=“0..1”


此错误主要是因为添加到EF后,表定义可能已更改。
解决方案是将其从EF模型中删除,然后使用数据库中的更新模型再次添加。

它要求您将主体角色更改为0..1,而不是整个关系,以便关系关系关系变为0-1到多

  • 在edmx图形中的关系线上单击鼠标右键
  • 选择属性
  • 将End1倍数(ReportCellImages)从1更改为0..1
  • 重建

  • 我真正想要的是一对多的关系。如果字段不可为空,则该字段更好。但是,由于外键约束,我无法将更改部署到现有数据库。顺便说一句,我不是dba,如果我是dba,我可能知道如何轻松做到这一点。EF不允许您这样做。如果字段可为空,则不能有1对多。您必须对多个字段使用0..1。我发现,如果我想在表中创建一个新的不可为null的字段,首先需要将其创建为可为null的字段并填充它。然后我可以使它不可为null。然后,在部署到live时,我必须采取相同的步骤。我想知道有没有更好的办法?无论如何,当执行所有这些操作并从数据库更新EF时,EF中的设置并不总是与数据库更改相匹配,因此我遇到了这种错误。从技术上讲,你的答案是正确的,所以我会给你打勾。有人能澄清我在这件事上可以改变什么,不能改变什么吗?如果我更改了关系的属性(从数据库中的外键派生),下一次刷新是否会覆盖它们并重现错误?我发现,具有可空FK字段的现有表是正常的,但具有不可空FK的表导致了此错误。究竟为什么DB中的更强约束会导致EDMX出现这样的问题?这帮助我发现我需要将FK属性标记为可空。这很不幸,但EF的情况似乎经常如此。你可以花很长时间试图找出你做错了什么,但最后得出的结论是不是你:(有时简单地关闭并重新打开解决方案可以使这些错误消失。仍然有效。“从数据库刷新模型”(EF 6.1.3)没有以正确的方式更新关系。此解决方案节省了时间。谢谢。EF+=删除并重新创建如果您有一个巨大的数据库该怎么办?我想您可以先使用EF代码优先模型,但删除并添加一个巨大的数据库仍然是一件非常重要的事情。回答正确-但我不这么认为
     <Association Name="FK_O_Personel_PBS_AtanmaSekilleri">
              <End Type="eKampus_RTEUModel.PBS_AtanmaSekilleri" Role="PBS_AtanmaSekilleri" Multiplicity="0..1" />
              <End Type="eKampus_RTEUModel.O_Personel" Role="O_Personel" Multiplicity="*" />
              <ReferentialConstraint>
                <Principal Role="PBS_AtanmaSekilleri">
                  <PropertyRef Name="ID" />
                </Principal>
                <Dependent Role="O_Personel">
                  <PropertyRef Name="atamaSekliID" />
                </Dependent>
              </ReferentialConstraint>
            </Association>