Использование 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()
?