У меня есть вопрос. Можно ли заставить 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, это Синглтон (класс с частным конструктором только с методом 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() { }
}
Итак, как сделать один 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());
Могу ли я вызвать своему Farm.GetFarm() => this.farm с DBContext?
Добавить другое свойство, которое возвращает Farms [0]?
Посмотри на мою правку





Может быть, вам нужно выровнять иерархию мышления по одному, поскольку у вас есть одна база данных, вам нужна одна ферма, сделайте базу данных фермой, а все внутри базы данных - свойствами одной фермы ... по сути, когда вы пишете dbContext.Stables. Где ... dbContext ЯВЛЯЕТСЯ фермой, конюшни - это только конюшни этой фермы. Если вы хотите создать другую ферму, создайте другую базу данных
Не совсем уверены, чего вы пытаетесь достичь, имея метод GetFarms в системе, в которой есть только одна ферма?
Чтобы быть на 100% точным с одноэлементным шаблоном проектирования, мне нужно использовать метод доступа к классу getInstance(). Я спрашиваю ypu, можно ли получить то, что я хочу (получить ферму этим методом), используя EF или даже какой-либо ORM?
Реляционная база данных концептуально не поддерживает идею «единственного в своем роде». В базе данных нет одноэлементных кортежей; единственное, что нужно сделать - это иметь таблицу, в которой будет только один элемент. Но это, похоже, деталь реализации. Я согласен с Каем, что вам следует попытаться поднять эту иерархию вверх. Или подумайте, действительно ли вам нужен настоящий синглтон (и, следовательно, вы никогда не сможете расширить свое приложение для поддержки нескольких ферм).
ORM предназначен для сопоставления таблиц с сущностями, а таблица по своей сути не предназначена для хранения только одной строки.