使用实体框架在两个实体之间建立关系(OneToMany)

问题描述 投票:0回答:2

我有一个 C# 的 Windows 窗体应用程序项目。我正在使用 ORM 工具即实体框架。我是 EF 的初学者。我有两个实体(机器,用户) 一个用户可以拥有多台机器,但一台机器不能拥有多个用户。我想建立这样的关系。但现在我的类只有 id 和 name 属性。 我在当前状态下创建的类结构不适合我提到的任务,因为没有关系。

   internal class Machine
   {
       [Key]
       public int id { get; set; }
       public string name { get; set; }         
   }
  internal class User
  {
      [Key]
      public int id { get; set; }
      public string name { get; set; }    
  }

为了建立我提到的关系,我需要创建什么类结构?

c# entity-framework entity-framework-core orm
2个回答
1
投票

这就是我所做的

internal class Machine
   {
       [Key]
       public int id { get; set; }
       public string name { get => name; set => name = value; }     
       Public User User {get; set;}    
   }


internal class User
  {
      [Key]
      public int id { get; set; }
      public string name { get => name; set => name = value; }
      Public List<Machine> Machines {get; set;}
  }

然后添加迁移[命名您的迁移]

如:添加-迁移一对多关系-用户-机器 并更新数据库


1
投票

首先,你必须了解你想要实现的目标。

一个用户可以拥有多台机器,但一台机器不能拥有多个用户

这称为一对多关系。

现在在实体框架中有两种方法可以实现此目的,您可以通过在模型上放置正确的属性来实现,并且当它变得复杂时,您也可以在

OnModelCreating
方法中指定它。

您的模型应如下所示:

internal class Machine
{
   [Key]
   public int id { get; set; }
   public string name { get; set; }
   public int UserId { get; set; }  
   public User User { get; set; }
}

internal class User
{
   [Key]
   public int Id { get; set; }
   public string Name { get; set; }
   public ICollection<Machine> Machines { get; set; }
}

OnModelCreating
方法中(对于像这样的非复杂结构来说不是必需的),您将添加这些行

modelBuilder.Entity<User>()
    .HasMany(e => e.Machines)
    .WithOne(e => e.User)
    .HasForeignKey(e => e.UserId);

来自 Microsoft 文档的参考:https://learn.microsoft.com/en-us/ef/core/modeling/relationships/one-to-many

© www.soinside.com 2019 - 2024. All rights reserved.