特别说明:如果 Issue 报告为问题且开发成员回复确认问题之后但三天内都不能得到反馈,则视为无效Issue。
1.15.0
在执行insert的时候爆Unknown column 'Discriminator' in 'field list',
看日志是多插了一个Discriminator字段,但是全局搜索关键字都搜不到这个词,
我是DB First。
Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for details.
---> MySqlConnector.MySqlException (0x80004005): Unknown column 'Discriminator' in 'field list'
---> MySqlConnector.MySqlException (0x80004005): Unknown column 'Discriminator' in 'field list'
at MySqlConnector.Core.ResultSet.ReadResultSetHeaderAsync(IOBehavior ioBehavior) in //src/MySqlConnector/Core/ResultSet.cs:line 49
at MySqlConnector.MySqlDataReader.ActivateResultSet(CancellationToken cancellationToken) in //src/MySqlConnector/MySqlDataReader.cs:line 131
at MySqlConnector.MySqlDataReader.CreateAsync(CommandListPosition commandListPosition, ICommandPayloadCreator payloadCreator, IDictionary2 cachedProcedures, IMySqlCommand command, CommandBehavior behavior, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlDataReader.cs:line 436 at MySqlConnector.Core.CommandExecutor.ExecuteReaderAsync(IReadOnlyList
1 commands, ICommandPayloadCreator payloadCreator, CommandBehavior behavior, IOBehavior ioBehavior, CancellationToken cancellationToken) in //src/MySqlConnector/Core/CommandExecutor.cs:line 60
at MySqlConnector.MySqlCommand.ExecuteReaderAsync(CommandBehavior behavior, IOBehavior ioBehavior, CancellationToken cancellationToken) in //src/MySqlConnector/MySqlCommand.cs:line 310
at MySqlConnector.MySqlCommand.ExecuteDbDataReader(CommandBehavior behavior) in /_/src/MySqlConnector/MySqlCommand.cs:line 255
at System.Data.Common.DbCommand.ExecuteReader()
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)
at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConnection connection)
--- End of inner exception stack trace ---
at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConnection connection)
at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(IEnumerable1 commandBatches, IRelationalConnection connection) at Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChanges(IList
1 entries)
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IList1 entriesToSave) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(DbContext _, Boolean acceptAllChangesOnSuccess) at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlExecutionStrategy.Execute[TState,TResult](TState state, Func
3 operation, Func3 verifySucceeded) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(Boolean acceptAllChangesOnSuccess) at Microsoft.EntityFrameworkCore.DbContext.SaveChanges(Boolean acceptAllChangesOnSuccess) at Microsoft.EntityFrameworkCore.DbContext.SaveChanges() at Furion.DatabaseAccessor.DbContextPool.<>c.<SavePoolNow>b__6_1(DbContext u) at System.Linq.Enumerable.WhereSelectEnumerableIterator
2.GetCount(Boolean onlyIfCheap)
at System.Linq.Enumerable.Count[TSource](IEnumerable`1 source)
at Furion.DatabaseAccessor.DbContextPool.SavePoolNow()
at Furion.DatabaseAccessor.UnitOfWorkFilter.OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.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.g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
附sql
INSERT INTO `vm_materials_pickinfo` (`barcode`, `corp_name`, `corp_sn`, `cost_center`, `Discriminator`, `loc_sn`, `mach_name`, `mach_sn`, `mat_brand`, `mat_brand_name`, `mat_cat`, `mat_is_old`, `mat_life_plan`, `mat_model`, `mat_name`, `mat_need_back`, `mat_packing_name`, `mat_packing_unit_name`, `mat_pic`, `mat_qty_unit_pack`, `mat_sn`, `mat_use_for_id`, `mp_mr_sn`, `pdt_name`, `pdt_op_name`, `pdt_op_sn`, `pdt_sn`, `picking_qty`, `pk_domain`, `pk_rdorder_sn`, `pk_return_time`, `pk_sn`, `pk_sync_info`, `pk_sync_time`, `pk_time`, `pk_u_costcenter`, `pk_u_pick_type`, `plicking_list_sn`, `supplier_name`, `supplier_sn`, `user_name`, `user_sn`, `vm_sn`)
VALUES ('', '', 'WHEAT', '', 'VmMaterialsPickinfo', '1', '', '', '', '', '', 0, 0, 'test001fff', 'test001', 0, '盒', '片', '/goods/2020-07/20200716200527.jpg', 9, 'test005', null, '', '', '', '', '', 9, '1', '', '', 'PK-VM01-20210312092656', '', '', '2021-03-12T09:26:56', '', null, '', '', 'HaiHong', '555', '5555', 'VM01');
SELECT `pk_id`, `mat_life_rest`, `mat_life_used`, `mp_mat_quota_consumption`, `mp_MPS_qty`, `mp_mr_project_sn`, `pk_cw_mblnr_sn`, `pk_cw_po_sn`, `pk_cw_receipt_sn`, `pk_mat_price`, `pk_mat_price_sum`, `pk_mat_res1`, `pk_mat_res2`, `pk_mat_res3`, `pk_mat_res4`, `pk_mat_res5`, `pk_qr_code`, `pk_return_mat_type`, `pk_return_sn`, `pk_synced`
FROM `vm_materials_pickinfo`
WHERE ROW_COUNT() = 1 AND `pk_id` = LAST_INSERT_ID();
[UnitOfWork]
private void SaveMaterialPickingInfo(PickingInfoDto pickingInfo, VmStock stock)
{
pickingInfo.PickingQty *= pickingInfo.MatQtyUnitPack;
pickingInfo.MatIsOld = stock.LocMatQtyOld > 0;
var dbPickingInfo = _mapper.Map<VmMaterialsPickinfo>(pickingInfo);
_materialPickInfoRepository.Insert(dbPickingInfo); //插入出库信息
stock.LocMatQtyNew -= pickingInfo.PickingQty;
_stockRepository.Update(stock);//更新库存信息
var keep = _stockKeepRepository.SingleOrDefault(s =>
s.SukUserSn == pickingInfo.UserSn && s.SukMatSn == pickingInfo.MatSn) ?? new VmStockKeep
{
SukUserSn = pickingInfo.UserSn,
SukMatSn = pickingInfo.MatSn,
SukMatQty = 0
};
keep.SukMatQty += pickingInfo.PickingQty;
_stockKeepRepository.InsertOrUpdate(keep);//更新个人库存信息(非一次性用品,每个人手上有多少)
}
解决报错
这个问题是 EFCore 提示的,和 Furion 框架本身无关。出现这个问题一般是你的实体类继承了非抽象类,而且这个非抽象类也是一个表,通俗点说,就是表继承了表导致的。可以仔细审查一下。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
这个是EFCore的机制,Furion 只做拓展,无法改进微软底层的机制。
目前这个问题已经解决了吗?解决了我关闭Issue哦。
产生这个的原因就继承导致。EF会自动加入Discriminator字段,如果你是DbFirst 你要在那张表上增加Discriminator 为字符的字符串。
登录 后才可以发表评论