我有一个 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; }
}
为了建立我提到的关系,我需要创建什么类结构?
这就是我所做的
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;}
}
然后添加迁移[命名您的迁移]
如:添加-迁移一对多关系-用户-机器 并更新数据库
首先,你必须了解你想要实现的目标。
一个用户可以拥有多台机器,但一台机器不能拥有多个用户
这称为一对多关系。
现在在实体框架中有两种方法可以实现此目的,您可以通过在模型上放置正确的属性来实现,并且当它变得复杂时,您也可以在
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