实体框架核心单个对象而不是列表

时间:2019-01-07 07:07:03

标签: c# entity-framework design-patterns asp.net-core entity-framework-core

我有一个问题。是否可以强制Entity Framework制作类的一个实例而不是(例如)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; }
}

还有我的Farm类,即Singleton(仅具有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() { }
}

那么如何在Code First EntityFramework Core的整个数据库中制作一个Farm

编辑

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

每次调用上下文时,如何获取Farm的单个实例?例如,我有一个GET函数:

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


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

我可以从Farm.GetFarm() => this.farm给我的DBContext打电话吗?

1 个答案:

答案 0 :(得分:3)

也许您需要将层次结构的思维方式升级一次,因为您有一个数据库,想要一个服务器场,使数据库成为服务器场,而数据库中的所有内容都是单个服务器场的属性。 .stables。在... dbContext是服务器场的情况下,马s仅是该服务器场的马s。如果要建立另一个服务器场,请建立另一个数据库