【问题标题】:Entity Framework Core single object instead of ListEntity Framework Core 单个对象而不是 List
【发布时间】:2019-01-07 15:32:14
【问题描述】:

我有一个问题。是否可以强制实体框架创建一个类实例而不是(例如)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());

我可以从DBContext 拨打我的Farm.GetFarm() =&gt; this.farm 吗?

【问题讨论】:

  • 一个ORM是将表映射到实体,而一个表本质上并不意味着只存储一行
  • 添加另一个返回 Farms[0] 的属性?
  • 查看我的编辑

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


【解决方案1】:

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

【讨论】:

  • 不太确定您想要实现什么,在只有一个农场的系统中使用 GetFarms 方法?
  • 为了 100% 准确地使用单例设计模式,我需要使用访问方法来上课 getInstance()。我问 ypu,是否有可能使用 EF 或什至任何 ORM 获得我想要的(通过该方法获得农场)?
  • 关系数据库在概念上不支持这种“单一项目”的想法。数据库中没有单例元组;唯一的事情就是有一张只有一个项目的桌子。但这似乎是一个实现细节。我同意 Caius 的观点,即您应该尝试将这个层次结构向上移动。或者考虑一下您是否真的想要一个真正的单例(并因此限制您永远无法扩展您的应用程序以支持多个农场)。
猜你喜欢
  • 1970-01-01
  • 2016-10-15
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多