【问题标题】:Multiplicity conflicts with the referential constraint多重性与参照约束冲突
【发布时间】:2015-09-08 13:34:14
【问题描述】:

我收到以下 EF 错误:

Agent_MailingAddress: : 多重性与引用冲突 关系中角色“Agent_MailingAddress_Target”中的约束 'Agent_MailingAddress'。因为 Dependent 中的所有属性 角色是不可为空的,主体角色的多重性必须是 1

似乎在执行时抛出这个 base.OnModelCreating(modelBuilder).

这是我的模型。 FWIW,Agent 继承自 User 类。

public class Agent
{
    public int AgentId { get; set; }
    public int PrimaryAddressId { get; set; }
    public Address PrimaryAddress { get; set; }
    public int? MailingAddressId { get; set; }
    public Address MailingAddress { get; set; }
}

public class Address
{
    public int AddressId { get; set; }
    public string AddressLine1 { get; set; }
    public string AddressLine2 { get; set; }
}

我认为这个问题与Agent 具有多个Address 类型的属性有关,也可能是因为其中一个属性可以为空。我做了一些搜索,但似乎找不到答案。

我假设将我的 Agent 模型更改为具有 List<Address> 类型的单个属性,该属性将使用 UserAddresses 查找表来解决错误,但我更愿意保留当前模型而不是。

如何解决此错误?提前致谢。

【问题讨论】:

标签: c# entity-framework


【解决方案1】:

如果您的配置和模型不匹配,就会发生这种情况。

假设在您的数据库配置中,您有这样的规则:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Agent>().HasRequired(x=>x.MailingAddress);
    //..

但在您的模型中,您说 MailingAddress 是可选的:

public int? MailingAddressId { get; set; }

我认为这个问题与 Agent 拥有 多个地址类型的属性,也可能因为一个 其中一个是可以为空的

事实并非如此。

【讨论】:

  • 我觉得自己像个白痴。 AgentConfiguration 有Property(p =&gt; p.MailingAddressId).IsRequired();
  • 在映射中使用 this.HasRequired(o => o.Address) .WithMany() .HasForeignKey(o => o.AddressId) .WillCascadeOnDelete(false);
【解决方案2】:

首先对于数据库:如果您更改了已添加到 Entity Framework 的现有表,例如在事后添加了外键约束,请在 EDMX 设计器中删除该表并再次添加,这将解决错误。

【讨论】:

    【解决方案3】:

    确定问题根源的另一种方法如下:

    1. 打开 .edmx 文件并找到包含外键字段的实体。
    2. 找到导致错误消息的属性并右键单击以打开上下文菜单。
    3. 单击上下文菜单上的属性以打开属性窗口。
    4. 检查字段的 Nullable 属性并将其更改为适当的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      • 2017-12-28
      • 1970-01-01
      • 1970-01-01
      • 2012-10-23
      相关资源
      最近更新 更多