Entity Framework Core 单个对象而不是 List

mic*_*cer 5 c# design-patterns entity-framework entity-framework-core asp.net-core

我有个问题。是否可以强制实体框架创建类的一个实例而不是(例如)IEnumerable

在我的数据库中,我只想拥有一个Farm而不是Farms. 我Farm有我在 DBContext 中提到的所有其他列表:

public class FarmDbContext : DbContext
{
    public FarmDbContext(DbContextOptions<FarmDbContext> options) : base(options) { }

    public DbSet<Farm> Farms { get; set; } //i want to have one instance of farm
    public DbSet<Machine> Machines { get; set; }
    public DbSet<Stable> Stables { get; set; }
    public DbSet<Worker> Workers { get; set; }
    public DbSet<Cultivation> Cultivations { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

而我的 Farm 类,它是一个单例(具有私有构造函数的类,仅带有GetInstance()方法):

public class Farm
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual List<Stable> Stables { get; set; }
    public virtual List<Machine> Machines { get; set; }
    public virtual List<Worker> Workers { get; set; }
    public virtual List<Cultivation> Cultivations { get; set; }

    public Farm GetFarm() => farm;

    private Farm farm;
    private Farm() { }
}
Run Code Online (Sandbox Code Playgroud)

那么如何Farm在 Code First EntityFramework Core 中在整个数据库中创建一个呢?

编辑

也许我的问题不会 100% 准确。

如何每次都获得 Farm 的单个实例,我称之为上下文?例如,我有一个GET功能:

private readonly FarmDbContext _context;
public FarmController(FarmDbContext context) => _context = context;


// GET: api/Farm
[HttpGet]
public IActionResult GetFarms() => Ok(_context.Farms.SingleOrDefault());
Run Code Online (Sandbox Code Playgroud)

我可以叫我Farm.GetFarm() => this.farmDBContext

Cai*_*ard 4

也许您需要将您的层次结构思维提升一级,因为您有一个数据库,想要一个场,使数据库成为场,并且数据库内的所有内容都是单个场的属性.. 因此,本质上是当您编写 dbContext.Stables 时。其中... dbContext 是农场,马厩只是该农场的马厩。如果你想创建另一个农场,就创建另一个数据库