Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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_Entity_Icollection - Fatal编程技术网

C# 如何在实体框架中创建两个表之间的双向关系

C# 如何在实体框架中创建两个表之间的双向关系,c#,entity-framework,entity,icollection,C#,Entity Framework,Entity,Icollection,我有两个表,我想创建从User到Contact的1-n关系,并在EF中反转。这意味着我需要2路关系到2个目的地,他们是基表太多。 用户类中的Contact表应该作为ICollection引入,因此我的关系出错,两者都是一方。但是如果我删除i集合一切都是正确的 我应该如何解决这个问题 public class User { [Key] public Guid Id {get; set;} [ForeignKey("ContactId")] pu

我有两个表,我想创建从
User
Contact
的1-n关系,并在EF中反转。这意味着我需要2路关系到2个目的地,他们是基表太多。 用户类中的
Contact
表应该作为
ICollection
引入,因此我的关系出错,两者都是一方。但是如果我删除
i集合
一切都是正确的

我应该如何解决这个问题

  public class User
  {
    [Key]
    public Guid Id {get; set;}       
    [ForeignKey("ContactId")]
    public virtual ICollection<Contact> Contacts {get; set;}        
    public Guid? ContactId {get;set;}
  }

  public class Contact
  {
    [Key]
    public Guid Id {get; set;}
    [ForeignKey("UserId")]
    public virtual User User {get; set;}
    public Guid? UserId {get; set;}
  }
公共类用户
{
[关键]
公共Guid Id{get;set;}
[外键(“联系人ID”)]
公共虚拟ICollection联系人{get;set;}
公共Guid?联系人ID{get;set;}
}
公共类联系人
{
[关键]
公共Guid Id{get;set;}
[外键(“用户ID”)]
公共虚拟用户用户{get;set;}
公共Guid?用户ID{get;set;}
}
如果我删除联系人的外键:


我想在这些表之间再加一个关系,但方向不同

实现这一点的方法有很多。你可以这样做

  public class User
  {
    [Key]
    public Guid Id {get; set;}
    public virtual ICollection<Contact> Contacts { get; set; }
  }

  public class Contact
  {
    [Key]
    public Guid Id {get; set;}
    public virtual User User {get; set;}
  }
公共类用户
{
[关键]
公共Guid Id{get;set;}
公共虚拟ICollection联系人{get;set;}
}
公共类联系人
{
[关键]
公共Guid Id{get;set;}
公共虚拟用户用户{get;set;}
}

你也可以这样试试

  public class User
  {
    [Key]
    public Guid UserId {get; set;}
    public virtual ICollection<Contact> Contacts { get; set; }
  }

  public class Contact
  {
    [Key]
    public Guid Id {get; set;}
    public Guid UserId {get; set;}
    public virtual User User {get; set;}
  }
公共类用户
{
[关键]
公共Guid用户标识{get;set;}
公共虚拟ICollection联系人{get;set;}
}
公共类联系人
{
[关键]
公共Guid Id{get;set;}
公共Guid用户标识{get;set;}
公共虚拟用户用户{get;set;}
}
它包括外键属性
UserId


要了解更多信息,请访问此

有很多方法可以实现此目的。你可以这样做

  public class User
  {
    [Key]
    public Guid Id {get; set;}
    public virtual ICollection<Contact> Contacts { get; set; }
  }

  public class Contact
  {
    [Key]
    public Guid Id {get; set;}
    public virtual User User {get; set;}
  }
公共类用户
{
[关键]
公共Guid Id{get;set;}
公共虚拟ICollection联系人{get;set;}
}
公共类联系人
{
[关键]
公共Guid Id{get;set;}
公共虚拟用户用户{get;set;}
}

你也可以这样试试

  public class User
  {
    [Key]
    public Guid UserId {get; set;}
    public virtual ICollection<Contact> Contacts { get; set; }
  }

  public class Contact
  {
    [Key]
    public Guid Id {get; set;}
    public Guid UserId {get; set;}
    public virtual User User {get; set;}
  }
公共类用户
{
[关键]
公共Guid用户标识{get;set;}
公共虚拟ICollection联系人{get;set;}
}
公共类联系人
{
[关键]
公共Guid Id{get;set;}
公共Guid用户标识{get;set;}
公共虚拟用户用户{get;set;}
}
它包括外键属性
UserId

有关详细信息,请转到此

公共类用户
{
[关键]
公共Guid Id{get;set;}
//[外键(“联系人ID”)]
公共虚拟ICollection联系人{get;set;}
//公共Guid?联系人ID{get;set;}
}
1-n关系的一侧没有外键

公共类用户
{
[关键]
公共Guid Id{get;set;}
//[外键(“联系人ID”)]
公共虚拟ICollection联系人{get;set;}
//公共Guid?联系人ID{get;set;}
}

1-n关系的一侧没有外键

如果需要用户与联系人之间的1-n关系,则需要附加导航属性。为了确定EF行为,您还可以配置模型。 这是一个例子

[Table("User78")]
public class User
{
    [Key]
    public int Id { get; set; }
    public virtual ICollection<Contact> Contacts { get; set; }
    public virtual User MyPreferredUser { get; set; }
}

[Table("Contact78")]
public class Contact
{
    [Key]
    public int Id { get; set; }
    public virtual User User { get; set; }
}

public class Context : DbContext
{
    public Context()
    { }

如果需要用户与联系人之间的1-n关系,则需要附加导航属性。为了确定EF行为,您还可以配置模型。 这是一个例子

[Table("User78")]
public class User
{
    [Key]
    public int Id { get; set; }
    public virtual ICollection<Contact> Contacts { get; set; }
    public virtual User MyPreferredUser { get; set; }
}

[Table("Contact78")]
public class Contact
{
    [Key]
    public int Id { get; set; }
    public virtual User User { get; set; }
}

public class Context : DbContext
{
    public Context()
    { }

是否删除
公共Guid?ContactId{get;set;}
[外键(“ContactId”)]
。您希望为
用户
联系人
建立1-n关系,因此
联系人
应定义为集合;i、 e.
公共虚拟ICollection联系人{get;set;}
谢谢你…我在你写的时候测试了。。但我有一个1-n关系,从“联系人”到“用户”。我还需要一个反向方向的关系。从“用户”到“联系人”,为什么(你认为)你需要这种额外的关系?您将如何使用它?让我举一个例子:我的用户表是给我的老板的,联系人表是给他的员工的,所以每个老板都可以有多个员工。。。所以在联系人表中应该插入用户id,这意味着谁是你们的老板?然后我想要一个联系人的名称,它是boss 1的联系人,它也有其他条件(对于与用户表有关系的其他表),因此我应该在我的用户表中有联系人id和虚拟联系人,以便从中获取数据。我希望我解释清楚。再说一遍,你会如何使用它?使用更多的C#(可能还有SQL)来解决您的问题。是否删除
公共Guid?ContactId{get;set;}
[外键(“ContactId”)]
。您希望为
用户
联系人
建立1-n关系,因此
联系人
应定义为集合;i、 e.
公共虚拟ICollection联系人{get;set;}
谢谢你…我在你写的时候测试了。。但我有一个1-n关系,从“联系人”到“用户”。我还需要一个反向方向的关系。从“用户”到“联系人”,为什么(你认为)你需要这种额外的关系?您将如何使用它?让我举一个例子:我的用户表是给我的老板的,联系人表是给他的员工的,所以每个老板都可以有多个员工。。。所以在联系人表中应该插入用户id,这意味着谁是你们的老板?然后我想要一个联系人的名称,它是boss 1的联系人,它也有其他条件(对于与用户表有关系的其他表),因此我应该在我的用户表中有联系人id和虚拟联系人,以便从中获取数据。我希望我解释清楚。再说一遍,你会如何使用它?用更多的C#(也许还有SQL)来计算你的问题。谢谢你的回答。。正如您所说,我删除了外键,但我有一个从“联系人”到“用户”的1-n关系。我还需要一个与反向侧方向的关系。在这个解决方案中,您有
ICollection Contacts
来自
User
的导航属性,也有
Use