zoukankan      html  css  js  c++  java
  • Entity Framework 6.0 常见异常及解决办法

    Ø  简介

    本文主要记录 EF(Entity Framework) 在平时的开发中可能遇到的异常,以及应该如何去解决。

     

    1.   System.InvalidOperationException

    1)   异常描述:无法为具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer”。请确保使用限定程序集的名称且该程序集对运行的应用程序可用。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=260882

     

    2)   异常解释:这个异常有可能是因为我们运行程序目录中不存在 EntityFramework.SqlServer.dll,而 EF 对数据库的操作需要依赖该程序集,但是在我们引用的“数据访问层”类库中并没有使用到 EntityFramework.SqlServer.dll,所以并不会输出到运行程序目录。

     

    3)   解决办法(2种方法):

    1.   直接在运行程序项目中引用 EntityFramework.SqlServer.dll,但是这种方法比较繁琐,因为每个引用了数据访问层的运行项目中都必须这样去引用(比较麻烦或容易忘记)。

    2.   【推荐】在数据访问层的项目中实现对 EntityFramework.SqlServer.dll 的直接依赖,这样每个引用了数据访问层的项目都会输出该程序集,例如在 EF 数据上下文中添加如下代码:

    static MyTestingContext()

    {

        //使得 EntityFramework.SqlServer.dll 能够输出到运行程序目录中

        if (typeof(System.Data.Entity.SqlServer.SqlFunctions) == typeof(object)) { }

    }

     

    2.   System.Data.ProviderIncompatibleException System.Data.Entity.Core.ProviderIncompatibleException

    1)   异常描述:这个异常让我折腾了老半天,硬是下午都没找到原因!网上有人说是数据库连接配置有问题,但是这是公司项目数据库连接基本不变,怎么就有问题了!而且 EF 这块的代码也没怎么改,就莫名奇妙冒出这个异常了,记得当时有个异常信息:EF 提供程序未返回 ProviderManifestToken 字符串。

     

    2)   解决办法:无论我各种改就是不行,后来尝试重启下 VS 后来居然可以了。所以总结下,当无法找到异常问题时,可以尝试重启 VS 或者电脑,搞不好是开发环境或开发工具出了问题。当然这个问题肯定还是某程序出问题了,可能重启 VS 刚好能解决这个问题吧。

     

    3.   System.NotSupportedException

    1)   异常描述:LINQ to Entities 不支持 LINQ 表达式节点类型“ArrayLength”。这个异常可能是因为以下语法导致,举例:

    int[] ccIds = RepositoryHelper.GetLastCateringCategoryIds(cateringTypeId, cateringCategorys);

    var dataList = (from t1 in DataContext.CateringCategorys

                    where (ccIds.Length == 0 || ccIds.Contains(t1.CategoryId))

                    select t1).ToList();

     

    2)   解决办法:这是因为在 LINQ to Entities 中不支持数组的 Length 属性,但是支持 List.Count 属性和方法,将集合 ccIds 改为 List<int> 类型即可。

     

    4.   数据提交异常

    1)   异常描述:

    1.   System.Data.Entity.Core.EntityException:An error occurred while starting a transaction on the provider connection. See the inner exception for details.

    2.   System.Data.SqlClient.SqlException:不允许启动新事务,因为有其他线程正在该会话中运行。

     

    2)   解决办法:通常情况下可能是因为 dbContext.SaveChanges(); 代码再循环中执行导致,将该方法的调用放在循环外面即可。具体原因未知!

  • 相关阅读:
    HTML转码码表
    【转】javascript 小技巧 JavaScript[对象.属性]集锦
    枯燥的数据库插入修改,投机取巧的方法
    asp.net jquery ajax处理json数据
    .net生成zTree标准形式的json数据源
    SqlDateTime 溢出
    limit 与 offset
    祖国六十大寿阅兵
    Esri for Window Phone 7(一) 加载BingMap
    Create a Settings Page for Windows phone
  • 原文地址:https://www.cnblogs.com/abeam/p/8590362.html
Copyright © 2011-2022 走看看