EF框架常见异常处理汇总

EF框架使用常见异常处理

同一个实体被多次tracked的问题

错误提示 The instance of entity type 'XXXX' cannot be tracked because another instance with the same key value for {'Key'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached. 这里面的"XXXX"可能是任意一个实体模型的名称,"Key"则是这个实体的Key字段。出现这个错误的原因是试图更新某个实体时,拥有相同Key的另一个实体也被EF Core tracked了。常见以下情况:

Json字符串转换的对象赋值时

  1. 定义一个Json字符串对象

    public class Root
    {
    ///


    ///
    ///

    public Signal signal { get; set; }
    ///
    ///
    ///

    public Info info { get; set; }
    ///
    ///
    ///

    public List<ListItem> list { get; set; } = new List<ListItem>();
    }

  2. 赋值

    //异常写法
    Info p_info= new Info();
    p_info.value1="1";
    root.info = p_info;//赋值1
    Signal p_signal=new Signal();
    p_signal.value1="测试";
    root.signal = p_signal; //赋值2
    string message = JsonConvert.SerializeObject(root); //转成Json字符串
    //完成字符串发送后更新对应对象数据时提示异常

    //正常写法 创建新对象赋值,避免引用类型指向同一个地址
    root.info = p_info.ToJson().JsonToObject<TDataModel.Info>(); //赋值1
    root.signal = signal.ToJson().JsonToObject<TDataModel.Signal>(); //赋值2
    string message = JsonConvert.SerializeObject(root);

    public static class JsonHelper
    {
    public static string ToJson(this object obj)
    {
    return JsonConvert.SerializeObject(obj);
    }
    ///


    /// JSON格式转换为对象
    ///

    /// <param name="obj"></param>
    /// <returns></returns>
    public static T JsonToObject<T>(this string serialize) where T : class, new()
    {
    try
    {
    T deserialize = JsonConvert.DeserializeObject<T>(serialize);
    return deserialize;
    }
    catch (Exception e)
    {
    throw new Exception($"JsonToObject 异常:{e}");
    }
    }
    }

持续更新中。。。。

相关推荐
△曉風殘月〆4 天前
C#如何简单地组合linq查询条件
c#·linq·ef
yangshuquan2 个月前
分享一个 .NET EF6 应用二级缓存提高性能的方法
性能优化·c#·.net·ef
yangshuquan2 个月前
分享 2 个 .NET EF 6 只更新某些字段的方法
c#·.net·ef
yangshuquan2 个月前
分享一个 .NET EF 6 扩展 Where 的方法
c#·.net·linq·ef
yangshuquan2 个月前
分享 .NET EF6 查询并返回树形结构数据的 2 个思路和具体实现方法
c#·.net·linq·ef
yangshuquan2 个月前
分享一个 .NET 通过监听器拦截 EF 消息写日志的详细例子
c#·.net·拦截器·ef
goyeer4 个月前
【.NET Core】你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟
开发语言·microsoft·c#·.netcore·ef
goyeer5 个月前
【Entity Framework】你知道如何处理无键实体吗
数据库·microsoft·c#·.netcore·ef
goyeer5 个月前
【Entity Framework】EF连接字符串和模型
microsoft·c#·asp.net·.netcore·ef
goyeer6 个月前
【Entity Framework】EF中的增删改查
c#·asp.net·.netcore·ef