Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
C# 多重性与引用约束冲突_C#_Entity Framework - Fatal编程技术网

C# 多重性与引用约束冲突

C# 多重性与引用约束冲突,c#,entity-framework,C#,Entity Framework,我收到以下EF错误: 代理_MailingAddress::多重性与引用冲突 关系中角色“代理\邮件地址\目标”中的约束 “代理地址”。因为依赖关系中的所有属性 角色不可为Null,则主体角色的多重性必须为空 一, 当它执行时,它似乎会抛出这个 base.OnModelCreating(modelBuilder)。 这是我的模型。FWIW,代理继承自用户类 public class Agent { public int AgentId { get; set; } public i

我收到以下EF错误:

代理_MailingAddress::多重性与引用冲突 关系中角色“代理\邮件地址\目标”中的约束 “代理地址”。因为依赖关系中的所有属性 角色不可为Null,则主体角色的多重性必须为空 一,

当它执行时,它似乎会抛出这个
base.OnModelCreating(modelBuilder)。

这是我的模型。FWIW,
代理
继承自
用户

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
类型的属性有关,可能还因为其中一个属性可以为null。我做了一些搜索,但似乎找不到答案

我假设更改我的
代理
模型,使其具有一个类型为
列表
的属性,该属性将使用
用户地址
查找表来解决错误,但我更希望保留当前模型,而不是


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

如果您的配置和型号不匹配,可能会发生这种情况

假设在db配置中,您有如下规则:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Agent>().HasRequired(x=>x.MailingAddress);
    //..
我相信这个问题与代理已经 Address类型的多个属性,可能也是因为一个 它们中的任何一个都可以为空


事实并非如此。

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

  • 打开.edmx文件并找到包含外键字段的实体
  • 找到导致错误消息的属性,然后右键单击以打开关联菜单
  • 单击关联菜单上的“属性”以打开“属性”窗口
  • 检查字段的Nullable属性并将其更改为适当的值

  • 对于database first:如果您更改了已添加到实体框架中的现有表,例如在事实发生后添加了外键约束,请在EDMX设计器中删除该表,然后再次添加,这将解决错误。

    您发布的代码看起来正常。问题一定是你如何使用它。显示发生错误的代码,并发布完整的异常消息。对不起,伙计们。更新了。可能重复您在建模创建中有任何配置吗?我觉得自己像个白痴。AgentConfiguration具有
    属性(p=>p.MailingAddressId).IsRequired()用于映射this.HasRequired(o=>o.Address).WithMany().HasForeignKey(o=>o.AddressId).WillCascadeOnDelete(false);
    
    public int? MailingAddressId { get; set; }