EF未为虚拟属性创建表

本文关键字:创建 属性 虚拟 EF | 更新日期: 2023-09-27 18:26:40

我首先使用带有代码的EF。我的模型包含两个虚拟属性,如:

ClassA
public int Id { get; set; }
public string Name { get; set; }
public virtual List<int> Teams { get; set; }
public virtual List<int> Levels { get; set; }

EF为我创建了数据库表,只有ClassA表。没有可以存储团队和级别数据的表。当我运行AddMigration命令时,创建的迁移文件是空的,EF认为没有挂起的更改。此外,当我运行更新数据库命令时,EF表示没有挂起的更改。

我在这里错过了什么?

EF未为虚拟属性创建表

为什么不这样做:

public class Team { 
    public int Id { get; set; }
    public virtual ICollection<Player> Players { get; set; }
}
public class Level { 
    public int Id { get; set; }
    public virtual ICollection<Player> Players { get; set; }
}
public class Player {
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Team> Teams { get; set; }
    public virtual ICollection<Level> Levels { get; set; }
}

如果你真的想要"轻量级"(请不要),你可以做:

public class Player {
    public int Id { get; set; }
    public string Name { get; set; }
    //use comma separated values (starting and ending with ,)
    public string Teams { get; set; } 
    public string Levels { get; set; }
}

假设你的上下文中有这些

var player1 = new Player(){Teams = ",1,2,"}
var player2 = new Player(){Teams = ",3,2,"}

现在,你可以通过将两者都加入第二组

var players = context.Players.Where(p=>p.Teams.Contains(",2,"));