多重性与引用约束冲突

时间:2015-09-08 13:34:14

标签: c# entity-framework

我收到以下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查找表来解决错误,但我更愿意保留当前模型而不是。

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

3 个答案:

答案 0 :(得分:30)

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

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

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

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

public int? MailingAddressId { get; set; }
  

我认为这个问题与Agent的事实有关   不止一个Address类型的属性,也可能是因为一个   他们是可空的

事实并非如此。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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