我收到以下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
查找表来解决错误,但我更愿意保留当前模型而不是。
如何解决此错误?提前谢谢。
答案 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)
确定问题根源的另一种方法如下:
答案 2 :(得分:0)
首先对于数据库:如果更改了已添加到Entity Framework中的现有表,则说在事实之后添加了外键约束,请在EDMX设计器中删除该表并再次添加,这将解决错误。