8.7K Star 14.3K Fork 4.2K

GVPdotNET China/Furion

 / 详情

Efcore 添加时报错 Object reference not set to an instance of an object.

已完成
创建于  
2023-01-17 22:22

输入图片说明

💢 特别说明:如果 Issue 没有严格按照模板编写且未提供测试源码下载或 Git 测试仓库地址,则视为无效 Issue,将无法得到答复。

Furion 版本号

4.8.4.16


.NET SDK 版本号

  • .NET5
  • .NET6
  • .NET7

项目类型

  • WebApi
  • Mvc
  • Razor Pages
  • Blazor Server
  • MinApp
  • WinForm
  • WPF
  • Console

操作系统和版本

  • Windows(版本号?Windows11)
  • Linux(版本号?)
  • MacOS(版本号?)
  • 其他(版本号?)

代码环境

  • 开发环境(Development)
  • 生产环境(Production)
  • 测试环境(Tests/单元测试/集成测试 )

描述你的问题

发生了什么?
efcore 添加时报错;错误信息为:Object reference not set to an instance of an object.

 public class Startup : AppStartup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDatabaseAccessor(options =>
            {
                options.AddDbPool<EQUDbContext>(DbProvider.Oracle);
                options.AddDbPool<CHKDbContext, CHKDbContextLocator>(DbProvider.Oracle);
                options.AddDbPool<NBDWDbContext, NBDWDbContextLocator>(DbProvider.Oracle);
                options.AddDbPool<NBITGDbContext, NBITGDbContextLocator>(DbProvider.Oracle);
                options.AddDbPool<DPSDbContext, DPSDbContextLocator>(DbProvider.Oracle);
                options.AddDbPool<PMSDbContext, PMSDbContextLocator>(DbProvider.Oracle);
                options.AddDbPool<SMESDbContext, SMESDbContextLocator>(DbProvider.Oracle);
                options.AddDbPool<PUBDbContext, PUBDbContextLocator>(DbProvider.Oracle);
                options.AddDbPool<PRMDbContext, PRMDbContextLocator>(DbProvider.Oracle);
                options.AddDbPool<QUADbContext, QUADbContextLocator>(DbProvider.Oracle);
                options.AddDbPool<STDDbContext, STDDbContextLocator>(DbProvider.Oracle);
                options.AddDbPool<MYBASEDbContext, MYBASEDbContextLocator>(DbProvider.Oracle);


            }, "Scene.Database.Migrations");


        }
    }
   [AppDbContext("MYBASEConnectionString", DbProvider.Oracle)]
    public class MYBASEDbContext : AppDbContext<MYBASEDbContext, MYBASEDbContextLocator>
    {
        public MYBASEDbContext(DbContextOptions<MYBASEDbContext> options) : base(options)
        {
            // 启用实体数据更改监听
            EnabledEntityChangedListener = false;
            // 忽略空值更新
            //InsertOrUpdateIgnoreNullValues = true;
        }

      
    }
public sealed class MYBASEDbContextLocator : IDbContextLocator
    {
    }
public class CRAFTPERDISPOSITION : IEntity<MYBASEDbContextLocator>, IEntityTypeBuilder<CRAFTPERDISPOSITION, MYBASEDbContextLocator>
{
    public string ID { get; set; }
    public void Configure(EntityTypeBuilder<CRAFTPERDISPOSITION> entityBuilder, DbContext dbContext, Type dbContextLocator)
    {
        entityBuilder.HasKey(e => e.ID);

        entityBuilder.Property(e => e.ID)
            .HasMaxLength(36)
            .IsUnicode(false);
      
    }
 public class Craftperdisposition : IDynamicApiController
    {
        private readonly IRepository<CRAFTPERDISPOSITION, MYBASEDbContextLocator> _main;
        public Craftperdisposition(IRepository<CRAFTPERDISPOSITION, MYBASEDbContextLocator> main)
        {
            _main = main;
        }
    }
  public async Task AddCraftperdisposition(CRAFTPERDISPOSITIONBase inData)
        {
            var data = new CRAFTPERDISPOSITION();
            data.ID = Guid.NewGuid().ToString("N");
            await data.InsertAsync();
        }

异常堆栈信息

异常堆栈是什么?

System.NullReferenceException: Object reference not set to an instance of an object.
   at Furion.DatabaseAccessor.EntityExecutePart`1.InsertAsync(Nullable`1 ignoreNullValues, CancellationToken cancellationToken)
   at Furion.DatabaseAccessor.Extensions.IEntityExtensions.InsertAsync[TEntity](TEntity entity, Nullable`1 ignoreNullValues, CancellationToken cancellationToken)
   at Scene.Application.CraftperdispositionControllers.Craftperdisposition.AddCraftperdisposition(CRAFTPERDISPOSITIONBase inData) in D:\项目\宁波烟厂\现场代码\现场(新)\Scene.Application\CraftperdispositionControllers\Craftperdisposition.cs:line 53
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Logged|12_1(ControllerActionInvoker invoker)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextExceptionFilterAsync>g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)

测试项目代码

⚠⚠ 必须提供完整可运行且包含错误的 Git 仓库 DEMO,DEMO 提供最简单的错误逻辑代码,否则将无法得到答复。⚠⚠

您的代码下载地址?
https://gitee.com/Ticlj/furion-test.git

数据库信息和版本

请提供安装的 Nuget 包版本号。

  • Sqlite(包名和版本号?)
  • SqlServer(包名和版本号?)
  • MySQL(包名和版本号?)
  • Oracle(Oracle.EntityFrameworkCore 7.21.8)
  • PostgreSQL(包名和版本号?)
  • Firebird(包名和版本号?)
  • Cosmos(包名和版本号?)
  • InMemoryDatabase(包名和版本号?)

期待结果

期待的结果是?


确认工单

为了减少不必要的沟通成本和时间成本,请再次确认 Issue 已按照要求正确填写,否则将被直接关闭。

评论 (5)

chenlijunaaaa 创建了任务 2年前
chenlijunaaaa 修改了描述 2年前
chenlijunaaaa 修改了描述 2年前
chenlijunaaaa 修改了描述 2年前
chenlijunaaaa 修改了描述 2年前
chenlijunaaaa 修改了描述 2年前
展开全部操作日志

都不想说了,提供一个复现错误的demo吧,

chenlijunaaaa 修改了描述 2年前

不好意思 现在提供了

await data.InsertAsync();
要不换成这个试下?
await _main.InsertAsync(data);

这个可以 那个就不行了

百小僧 修改了描述 2年前

已修正,下个版本发布:73e5fca

百小僧 任务状态待办的 修改为已完成 2年前
百小僧 里程碑设置为v4.8.5 2年前

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(3)
974299 monksoul 1578937227 chenlijunaaaa-Ticlj Wiki-Chen-wiki-chen
C#
1
https://gitee.com/dotnetchina/Furion.git
git@gitee.com:dotnetchina/Furion.git
dotnetchina
Furion
Furion

搜索帮助