Использование PropertyBuilder.HasValueGenerator и подключение к контексту базы данных - PullRequest
1 голос
/ 21 марта 2019

Я хотел бы иметь возможность искать информацию в моей базе данных и генерировать значение по умолчанию для одного из полей моей сущности на основе результатов.

Проблема в том, что я не знаю, как ввестиEF контекст в создании ValueGenerator.То, как я это делаю, теперь требует конструктора без параметров.

Вот что у меня есть.

В моем DbContext OnModelCreating:

            entity.Property(e => e.SampleNumber)
                .HasColumnName("SampleNumber")
                .HasMaxLength(25)
                .HasValueGenerator<SampleIDGenerator>();

Мой ValueGenerator:

public class SampleIDGenerator : Microsoft.EntityFrameworkCore.ValueGeneration.ValueGenerator
{
    public override bool GeneratesTemporaryValues => false;

    private readonly WellWaterEntities db;

    public SampleIDGenerator(WellWaterEntities context)
    {
        db = context;
    }

    protected override object NextValue(EntityEntry entry)
    {
        string lastitem = db.Samples.OrderByDescending(x => x.SampleNumber)
            .FirstOrDefault().SampleNumber;

        if (lastitem != null)
        {
            int lastSequence;
            if (int.TryParse(lastitem.Substring(5, 4), out lastSequence))
            {
                return lastitem.Substring(0, 5) + (lastSequence + 1).ToString("0000");
            }
        }
        return DateTime.Now.Year.ToString() + "-" + "0001";
    }
}

1 Ответ

0 голосов
/ 21 марта 2019

Параметр NextValue () EntityEntry entry заполняется DbContext entry.Context.

    protected override object NextValue(EntityEntry entry)
    {
        WellWaterEntities db = (WellWaterEntities) entry.Context;

        ...
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...