C# 实体上的多个一对一关系
您可以在EntityFramework5.0上看到我的模型结构,用户实体持有对Address和Address1实体的引用。另一方面,AddressHoldUsers集合作为引用,但实体框架无法知道用户依赖于哪个地址引用,所以我得到了异常 有哪些解决方案?我是说流利和不流利的解决方案C# 实体上的多个一对一关系,c#,.net,entity-framework,entity-framework-5,C#,.net,Entity Framework,Entity Framework 5,您可以在EntityFramework5.0上看到我的模型结构,用户实体持有对Address和Address1实体的引用。另一方面,AddressHoldUsers集合作为引用,但实体框架无法知道用户依赖于哪个地址引用,所以我得到了异常 有哪些解决方案?我是说流利和不流利的解决方案 public class User { public int Id { get; set; } public Address Address { get; set; } public Ad
public class User
{
public int Id { get; set; }
public Address Address { get; set; }
public Address Address1 { get; set; }
}
public class Address
{
public int Id { get; set; }
public ICollection<User> Users { get; set; }
}
公共类用户
{
公共int Id{get;set;}
公共广播地址{get;set;}
公共地址地址1{get;set;}
}
公共课堂演讲
{
公共int Id{get;set;}
公共ICollection用户{get;set;}
}
第一步是在用户类中包含外键:
public class User
{
public int Id { get; set; }
public int AddressId { get; set; }
public int Address1Id { get; set; }
public Address Address { get; set; }
public Address Address1 { get; set; }
}
Fluent API映射:
modelBuilder.Entity<User>()
.HasRequired(a => a.Address)
.WithMany()
.HasForeignKey(u => u.AddressId);
modelBuilder.Entity<User>()
.HasRequired(a => a.Address1)
.WithMany()
.HasForeignKey(u => u.Address1Id);
modelBuilder.Entity()
.HasRequired(a=>a.Address)
.有很多
.HasForeignKey(u=>u.AddressId);
modelBuilder.Entity()
.HasRequired(a=>a.Address1)
.有很多
.HasForeignKey(u=>u.Address1Id);
详情如下:
你能取而代之的是
地址的集合吗?不,我不需要保留集合而不是2个参考。也没有流畅的解决方案吗?@Freshblood标记你的导航属性[ForeignKey(“foreignKeyName”)]@MalcolmO'Hare,但这里你遗漏了一件事。ForeignKey属性仅当您希望指定ForeignKey属性,但它与关系另一端的关系无关时才有用。我指的是地址上的预订导航。将.WillCascadeOnDelete(false)
添加到.HasFroeignKey(u=>u.Address1Id)
中也很重要,否则会出现SQL错误(此信息也在链接文章中)@MattR我更喜欢通过在fluent api中指定HasOptional来保持ForeignKey为空。这样一来,级联删除是错误的默认值