码迷,mamicode.com
首页 > 数据库 > 详细

.net 5.0 使用oracle.entityframeworkcore 5.21.1 插入数据时生成序列的问题解决

时间:2021-03-16 14:10:37      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:使用   services   tps   sof   comm   ddd   拦截器   doc   ring   

我的配置环境是11.2.0.4, oracle.entityframeworkcore 的配置默认是使用12c,如果使用11G必须如下配置:

services.AddDatabaseAccessor(options =>
            {
                options.AddDbPool<DefaultDbContext>(null,
                    optionsBuilder =>
                    {
                        //设置oracle使用的版本
                        optionsBuilder.UseOracle(App.Configuration["ConnectionStrings:OracleConnectionString"], b =>
                        {
                            b.UseOracleSQLCompatibility("11");
                        });
                    },
                    //注册拦截器
                    interceptors: new Microsoft.EntityFrameworkCore.Diagnostics.IInterceptor[]
                    {
                        new SqlCommandAuditInterceptor()
                    });
            }, "SSS.FrameWork.Database.Migrations");

 

 

 主键的序列配置如下:

  entityBuilder.Property(e => e.UserId)
                .HasColumnName("USER_ID")
                .UseHiLo("SEQ_SYSUSER");

在插入的时候,第一次可以看到执行了一条生成序列的语句:

SELECT "SEQ_SYSUSER".NEXTVAL FROM DUAL

后面的9次都不会再生成这条语句,第11次的时候会重新执行上面的语句,造成第11次的主键与第2次的重复,与oracle官方沟通几个回合,没解决问题,在翻阅微软的文档时,发现如下的代码

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.HasSequence<int>("OrderNumbers");

    modelBuilder.Entity<Order>()
        .Property(o => o.OrderNo)
        .HasDefaultValueSql("NEXT VALUE FOR shared.OrderNumbers");
}

在代码中加入“modelBuilder.HasSequence<int>("OrderNumbers");”后问题解决,后续的每次插入 都会生成 序列SQL

OrderNumbers为序列名称

.net 5.0 使用oracle.entityframeworkcore 5.21.1 插入数据时生成序列的问题解决

标签:使用   services   tps   sof   comm   ddd   拦截器   doc   ring   

原文地址:https://www.cnblogs.com/Doson/p/14537653.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!