Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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#_.net_Entity Framework_Entity Framework 5 - Fatal编程技术网

C# 实体上的多个一对一关系

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

您可以在EntityFramework5.0上看到我的模型结构,用户实体持有对Address和Address1实体的引用。另一方面,AddressHoldUsers集合作为引用,但实体框架无法知道用户依赖于哪个地址引用,所以我得到了异常

有哪些解决方案?我是说流利和不流利的解决方案

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为空。这样一来,级联删除是错误的默认值