Отдельный объект 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, это Синглтон (класс с частным конструктором только с методом 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?

ORM предназначен для сопоставления таблиц с сущностями, а таблица по своей сути не предназначена для хранения только одной строки.

Tseng 07.01.2019 08:10

Добавить другое свойство, которое возвращает Farms [0]?

Caius Jard 07.01.2019 08:12

Посмотри на мою правку

michasaucer 07.01.2019 08:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
3
1 167
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Может быть, вам нужно выровнять иерархию мышления по одному, поскольку у вас есть одна база данных, вам нужна одна ферма, сделайте базу данных фермой, а все внутри базы данных - свойствами одной фермы ... по сути, когда вы пишете dbContext.Stables. Где ... dbContext ЯВЛЯЕТСЯ фермой, конюшни - это только конюшни этой фермы. Если вы хотите создать другую ферму, создайте другую базу данных

Не совсем уверены, чего вы пытаетесь достичь, имея метод GetFarms в системе, в которой есть только одна ферма?

Caius Jard 07.01.2019 09:32

Чтобы быть на 100% точным с одноэлементным шаблоном проектирования, мне нужно использовать метод доступа к классу getInstance(). Я спрашиваю ypu, можно ли получить то, что я хочу (получить ферму этим методом), используя EF или даже какой-либо ORM?

michasaucer 07.01.2019 09:39

Реляционная база данных концептуально не поддерживает идею «единственного в своем роде». В базе данных нет одноэлементных кортежей; единственное, что нужно сделать - это иметь таблицу, в которой будет только один элемент. Но это, похоже, деталь реализации. Я согласен с Каем, что вам следует попытаться поднять эту иерархию вверх. Или подумайте, действительно ли вам нужен настоящий синглтон (и, следовательно, вы никогда не сможете расширить свое приложение для поддержки нескольких ферм).

poke 07.01.2019 12:05

Другие вопросы по теме