EF Core + sql2005报错 An error occurred while updating the entries. See the inner exception for detail

问题:将原来.Net4.0+EF+sql2008系统迁到.NetCore + EF + SQL 2005上。在保存数据时出现

“An error occurred while updating the entries. See the inner exception for details”的错误。

迁移后,开发环境是sql2008 但客户那里是sql2005,所以原来的EFCore配置就要进行一些修改。

原因:

1、原sql2008的库支持date类型,sql2005中不支持。

解决方案:需在Context中改成datetime类型。

modelBuilder.Entity<W_WorkFlowApply>(entity =>
{
    //原来的entity.Property(e => e.WfaAddtime).HasColumnType("date");
    entity.Property(e => e.WfaAddtime).HasColumnType("datetime");
});

这个查了好多资料,还有的说是因为EF默认将date类型的字段转为datatime2类型,而sql2005不支持datetime2类型。故需要在配置里明确其类型为sql2005支持的类型datetime。

2、自增列主键的问题。

使用EF进行存表操作时原.Net4.0+EF+sql2008系统无需在声明对象时对 ID (自增列)进行赋值。

如下图:

//Sys_User表 有三个字段 ID(自增列主键)、UerName、PassWord
Sys_User UserModel = new Sys_User();
UserModel.UerName= "SanMao";
UserModel.PassWord= "111111";
db.Sys_User.Add(UserModel);
db.SaveChanges();

但迁移后再这么写就会报错,断点跟踪了一下UserModel 在SaveChanges()前其ID=0,在SaveChanges()后其ID就变成了-21737。

解决方案一:我的解决方案时将ID列改成varchar(50)类型,然后对其使用GUID进行赋值

//Sys_User表 有三个字段 ID(自增列主键)、UerName、PassWord
Sys_User UserModel = new Sys_User();
UserModel.ID = Guid.NewGuid().ToString();
UserModel.UerName= "SanMao";
UserModel.PassWord= "111111";
db.Sys_User.Add(UserModel);
db.SaveChanges();

解决方案二:这是网上的另一种解决方法,即找到Sys_User表在系统中对应的Sys_User.cs  Model文件,在ID字段加上数据注解特性。原文链接:https://blog.csdn.net/zhangpeterx/article/details/95678630

public class Sys_User 
{
    [ScaffoldColumn(false)]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    public string UserName{ get; set; }

    public string PassWord{ get; set; }
}

3、批量增加数据的问题。

我的解决方法是在for中进行SaveChanges(),这种方案肯定会影响效率,好在系统中这么处理的数据不多,在可接受的范围内。

UserNameList.ForEach(name=>
{
    Sys_User UserModel = new Sys_User();
    UserModel.ID= Guid.NewGuid().ToString();
    UserModel.UserName = name;
    UserModel.UserID = userID.ToString();
    UserModel.PassWord= "111111";
    db.Sys_UserSetModule.Add(model);
    db.SaveChanges();
});

目前我是尚未找到其他解决方案。欢迎大神抨击我。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值