c# - Entity Framework Core 单个对象而不是列表

标签 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() 方法的私有(private)构造函数类):

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());

我可以从 DBContext 调用我的 Farm.GetFarm() => this.farm 吗?

最佳答案

也许你需要将你的层次结构思维升级一个,因为你有一个数据库,想要一个农场,让数据库成为农场,数据库中的所有东西都是单个农场的属性..因此基本上当你写 dbContext .Stables.Where... dbContext 是农场,马厩永远只是那个农场的马厩。如果你想再做一个农场,再做一个数据库

关于c# - Entity Framework Core 单个对象而不是列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54069868/

相关文章:

c# - 正则表达式 - 我只想匹配正则表达式中的开始标签

c# - 实现通用 ToConcurrentDictionary 扩展方法

c# - EntityFrameworkCore RoleManager FindByIdAsync 可以填充声明吗?

c# - 如何构建与通用对象进行比较的 Linq 表达式树?

design-patterns - 依赖注入(inject)将业务层内部暴露给 UI 层——这肯定是一件坏事吗?

c++ - 取消运行长时间操作的线程

c# - 如何在 .net MVC3 中访问 javascript 函数中的 c# 变量值?

c# - 将数字 [n] 0-9 转换为键盘 Shift+[n] 字符

sql-server - 使用 Entity Framework 忽略 SQL View 的模型创建/更改

c# - 在业务对象和 DTO 之间共享内容