Nano Hash - криптовалюты, майнинг, программирование

Вставка записей в таблицы с отношениями «основной/подробности» с Entity Framework и MVC

У меня есть метод HttpPost в контроллере API, который принимает в качестве параметра сложный объект. Этот сложный объект имеет объект типа класса «Бюджет» (это главная таблица в базе данных) и список класса «BudgetDetail» (это детали основного класса).

Мне нужно вставить объект класса «Бюджет» в основную таблицу, а затем вставить список класса «BudgetDetail» в таблицу сведений.

Это метод HttpPost контроллера API:

[HttpPost]
public IHttpActionResult CreateBudget(NewBudget newBudget)
{
    var budget = new Budget
    {
        DateOfIssue = newBudget.Budget.DateOfIssue,
        VehicleId = newBudget.Budget.VehicleId,
        BudgetAccepted = newBudget.Budget.BudgetAccepted 
    };

    _context.Budgets.Add(budget);

    foreach (var detail in newBudget.BudgetDetails)
    {
        var detailBudget = new BudgetDetail
        {
            //BudgetId = Here i need to get id of the Budget table that i inserted before
            ProductId = detail.ProductId,
            Price = detail.Price,
            Quantity = detail.Quantity,
            Iva = detail.Iva,
            Total = detail.Total
        };
        _context.BudgetDetails.Add(detailBudget);
    }
    _context.SaveChanges();
    return Ok();
}

Проблема, с которой я столкнулся, заключается в том, что когда я пытаюсь вставить в таблицу «BudgetDetails», значение BudgetId основной таблицы равно нулю. Как я могу вставить в основную таблицу (Budget) и получить идентификатор этой таблицы (BudgetId) для вставки в таблицу сведений (BudgetDetails).

Это класс, который находится в параметре:

public class NewBudget
{
    public Budget Budget{ get; set; }
    public List<BudgetDetail> BudgetDetails{ get; set; }
}

Это мой бюджетный класс (главная таблица):

public class Budget
{
    public int Id { get; set; }
    public DateTime DateOfIssue { get; set; }
    public int VehicleId { get; set; }
    public bool BudgetAccepted { get; set; }
}

Это мой класс BudgetDetail (таблица сведений):

 public class BudgetDetail
{
    public int Id { get; set; }
    public int BudgetId { get; set; }
    public int ProductId { get; set; }
    public byte Quantity { get; set; }
    public int Price { get; set; }
    public int Iva { get; set; }
    public int Total { get; set; }
}

Я буду очень благодарен за любые предложения, которые вы мне дадите.


  • Если вы вызовете .SaveChanges() после context.Budgets.Add(budget);, то budget.Id будет содержать обновленное значение 16.08.2017

Ответы:


1

В методе CreateBudget измените конец. Что-то типа:

context.BudgetDetails.Add(detailBudget);
}
_context.SaveChanges();
return detailBudget.Id;

Он дает вам созданный идентификатор detailBudget из EF.

16.08.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..