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