扩展EF Core中的DbSet添加

时间:2019-05-08 08:27:30

标签: c# entity-framework entity-framework-core oracle-manageddataaccess

使用EfCore 2.2.4,试图在我的一个Db上下文中覆盖基本的DbSet实现。

我正在使用Oracle.ManagedDataAccess.Core 2.18.6,并且如果我尝试调用context.Customer.Add(new Customer());(出于主观考虑,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的实例,还是有一种更简单且通用的方法来实现对{{1 }}?

0 个答案:

没有答案