EF6.1.1的code first开发,出现异常: System.Data.Entity.SqlServer.SqlProviderServices, 悬赏50分

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EF6.1.1的code first开发,出现异常: System.Data.Entity.SqlServer.SqlProviderServices, 悬赏50分相关的知识,希望对你有一定的参考价值。

使用EF6.1.1的code first开发时经常报异常:未能从程序集“EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中加载类型“System.Data.Entity.Infrastructure.TableExistenceChecker”

开发环境: vs2013update4, mssql2008R2
具体情况:在用EF6.1.1的Code First 开发时,经常报错:
Message=“System.Data.Entity.SqlServer.SqlProviderServices”的类型初始值设定项引发异常。
Source=EntityFramework.SqlServer
TypeName=System.Data.Entity.SqlServer.SqlProviderServices
StackTrace:
在 System.Data.Entity.SqlServer.SqlProviderServices.get_Instance()
InnerException: System.TypeLoadException
HResult=-2146233054
Message=未能从程序集“EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中加载类型“System.Data.Entity.Infrastructure.TableExistenceChecker”。
Source=EntityFramework.SqlServer
TypeName=System.Data.Entity.Infrastructure.TableExistenceChecker
StackTrace:
在 System.Data.Entity.SqlServer.SqlProviderServices..ctor()
在 System.Data.Entity.SqlServer.SqlProviderServices..cctor()
在没有更改数据库结构和类的情况下, 只是更新数据库中的数据, 也会出现正异常.
通过SVN提交代码后, 在另一个电脑上Update代码, 没做任何更改直接调试也会出现这个错误

通过 程序包管理器控制台 执行Update-Database迁移更新后就没有异常了
但是update-database后别的在电脑上调试就会出现这个异常, 直接update-database异常也会消失.

请教各位大神, 为什么会出现这样的问题, 需要怎么解决, 这个太影响开发了, 急等着用呢.

参考技术A 1、估计EF dll包不对,或者是配置问题;(如果排除了就考虑2)
2、如果是VS的问题,建议重做系统和环境。本回答被提问者采纳
参考技术B 当前运行的项目到nuget里安装ef 参考技术C 1、查询SQL中的所有表: Select TABLE_NAME FROM 数据库名称.INFORMATION_SCHEMA.TABLES Where TABLE_TYPE='BASE TABLE' 执行之后,就可以看到数据库中所有属于自己建的表的名称 2、查询SQL中所有表及列: Select dbo.sysobjects.name as Table_name, dbo.syscolumns.name AS Column_name FROM dbo.syscolumns INNER JOIN dbo.sysobjects ON dbo.syscolumns.id = dbo.sysobjects.id Where (dbo.sysobjects.xtype = 'u') AND (NOT (dbo.sysobjects.name LIKE 'dtproperties')) 3、在Sql查询分析器,还有一个简单的查询方法: EXEC sp_MSforeachtable @command1="sp_spaceused '?'" 执行完之后,就可以看到数据库中所有用户表的信息 4、查询总存储过程数:select count(*) 总存储过程数 from sysobjects where xtype='p' 附:xtype类型D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束L = 日志FN = 标量函数
IF = 内嵌表函数
P = 存储过程
PK = PRIMARY KEY 约束(类型是 K)
RF = 复制筛选存储过程S = 系统表TF = 表函数
TR = 触发器U = 用户表UQ = UNIQUE 约束(类型是 K)V = 视图X = 扩展存储过程 另:在sqlserver中取得某个数据库中所有表名的sql语句 select sysobjects.name from sysobjects.xtype ='U';SELECT name
WHERE (xtype = 'U') 在数据库的sysobjects表里有这个数据库全部表的信息, xtype值为'U'的就是表名 注意:一般通过上述方法获得全部用户表示都会有一个dtproperties表,SQLSERVER 默认它也是用户表,想要从用户表中排出,需要加上限定条件 status>0,即:select * from sysobjects where xtype='U' and status>0追问

答非所问, 你根本就不知道我的描述的是什么问题, 答的不知道所云. 还是复制过来的内容, 极度鄙视这样骗分的

EF 4.1 Code First 出现无效的列名错误

【中文标题】EF 4.1 Code First 出现无效的列名错误【英文标题】:Invalid column name error with EF 4.1 Code First 【发布时间】:2013-05-22 22:32:41 【问题描述】:

我已经遇到这个问题大约一天了,我已经搜索并发现他们的解决方案存在类似问题,但无法解决这个问题。

我已经在 Teams 示例中看到了这一点,所以我也会这样做。我有一个Team

public abstract class Team

   [Key]
   public int IdTeam  get; set; 
   public string Name  get; set; 
   public string Description  get; set; 

我还有一个Match 对象:

public class Match

   [Key]
   public int IdMatch  get; set; 
   [ForeignKey("HomeTeam")]
   public int IdHomeTeam  get; set; 
   [ForeignKey("AwayTeam")]
   public int IdAwayTeam  get; set; 

   public virtual Team HomeTeam  get; set; 
   public virtual Team AwayTeam  get; set; 

每当我尝试访问任一团队的名称时,都会收到 Invalid column name Team_TeamId 错误。我猜这与 EF 和未正确映射外键有关。我还看到其他人使用 ICollections,但我认为在这种情况下我不需要它们。

【问题讨论】:

我已经编辑了我的答案,看看这是否有效 【参考方案1】:

您必须在 OnModelCreating 方法中解决此问题。实体框架似乎无法识别外键,所以必须具体指定。

public class Entities : DbContext

    ...

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    
        modelBuilder.Entity<Match>()
            .HasRequired(b => b.AwayTeam)
            .WithMany()
            .HasForeignKey(b => b.IdAwayTeam);
        modelBuilder.Entity<Match>()
            .HasRequired(b => b.HomeTeam)
            .WithMany()
            .HasForeignKey(b => b.IdHomeTeam);
    

有关代码优先的更多信息OnModelCreating,请查看:http://msdn.microsoft.com/en-us/library/system.data.entity.dbcontext.onmodelcreating(v=vs.103).aspx

【讨论】:

为什么团队抽象顺便说一句?团队是否有匹配集合? 不,它没有集合。没有收藏,没有摘要? 这应该可以,试试吧。实体框架不能处理这个标准,我们明确告诉它。 这实际上应该是您的问题的解决方案,您可以尝试将外键更改回来。如果您(临时)删除其中一个外键,也会发生这种情况吗?

以上是关于EF6.1.1的code first开发,出现异常: System.Data.Entity.SqlServer.SqlProviderServices, 悬赏50分的主要内容,如果未能解决你的问题,请参考以下文章

获取安全异常 SQLCE 4、Code First CTP 5 和共享主机

无法在EF Code First中创建复合主键

解决Code First MySql数据库 Specified key was too long; max key length is 767 bytes异常

使用 Code First 数据库迁移

Code First开发方式

EF中三大开发模式之DB First,Model First,Code First以及在Production Environment中的抉择