Расширение DbSet Add в EF Core - PullRequest
2 голосов
/ 08 мая 2019

Использование EfCore 2.2.4 Я пытаюсь переопределить базовую реализацию DbSet в одном из моих контекстов БД.

Я использую Oracle.ManagedDataAccess.Core 2.18.6, и если я пытаюсь вызвать context.Customer.Add(new Customer());(Все поля в клиенте допускают обнуление для аргументов, кроме первичного ключа RECORDNO) Я получаю ошибку:

не может вставить NULL в (SCHEMA.CUSTOMER.RECORDNO) .

Я понимаю, что мне нужно выработать и добавить значение последовательности RECORDNO к сущности, прежде чем я зафиксирую изменения через EfCore, и хотел сделать это, расширив DbSet.Add следующим образом:

public class OracleDbContext : DbContext
{
    public class OracleDbSet<TEntity> : DbSet<TEntity> where TEntity : class
    {
        public override EntityEntry<TEntity> Add(TEntity entity)
        {
            SetEntityRecordNumber(entity); //this will use reflection for [Key] attribute and set it to a sequence value I collect from the database
            return base.Add(entity);
        }
    }

    public OracleDbSet<Customer> Customers { get; set; }
...

Однакокогда я сейчас вызываю context.Customer.Add(new Customer()); значение равно context.Customer.

Как правильно заставить DbContext регистрировать экземпляры OracleDbContext, а также DbContext, или есть более простой и все же общий способ достижения переопределения или расширения до DbContext.Add()?

...