如何在C# WinForm项目中用Entity Framework建立Machine与User的一对多关系?
建立User与Machine的一对多关联(Entity Framework)
要实现一个用户对应多台机器的一对多关系,你需要给两个实体类添加导航属性和外键,具体修改后的类结构如下:
修改后的Machine类
internal class Machine { [Key] public int id { get; set; } public string name { get; set; } // 外键:关联到User的主键id public int UserId { get; set; } // 导航属性:指向所属的User public User User { get; set; } }
修改后的User类
internal class User { [Key] public int id { get; set; } public string name { get; set; } // 导航属性:指向该用户拥有的所有Machine集合 public ICollection<Machine> Machines { get; set; } = new List<Machine>(); }
关键部分说明:
Machine类中的UserId是外键字段,EF会自动识别实体名+主键名的命名规则,将其关联到User类的id主键。如果需要显式指定关联关系,可以给UserId加上[ForeignKey(nameof(User))]特性。Machine类的User导航属性:允许你从单台机器直接访问它所属的用户对象,比如machine.User.name。User类的Machines集合导航属性:允许你从单个用户直接获取它拥有的所有机器列表,比如user.Machines.ToList()。初始化= new List<Machine>()是为了避免后续操作时出现空引用异常。
可选:用Fluent API配置关系(更灵活)
如果你不想依赖数据注解,也可以在DbContext的OnModelCreating方法中用Fluent API手动配置关系:
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<User>() .HasMany(u => u.Machines) // 一个User对应多个Machine .WithOne(m => m.User) // 每个Machine仅属于一个User .HasForeignKey(m => m.UserId); // 指定外键为Machine的UserId字段 }
内容的提问来源于stack exchange,提问作者Emirhan Ay
相关产品推荐
相关产品推荐

