你的位置:首页 > ASP.net教程

[ASP.net教程]EF4.4 升级EF6.0问题总结


如出现下面代码错误,基本可能确定EF数据库配置错误

1 在 System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoaderCompositeResource.LoadResources(String assemblyName, String resourceName, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver) 在 System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoaderCompositeResource.CreateResourceLoader(String path, ExtensionCheck extensionCheck, String validExtension, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver) 在 System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoader.Create(String path, ExtensionCheck extensionCheck, String validExtension, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver) 在 System.Data.Entity.Core.Metadata.Edm.MetadataCache.SplitPaths(String paths) 在 System.Data.Entity.Core.Common.Utils.Memoizer`2.<>c__DisplayClass2.b__0() 在 System.Data.Entity.Core.Common.Utils.Memoizer`2.Result.GetValue() 在 System.Data.Entity.Core.Common.Utils.Memoizer`2.Evaluate(TArg arg) 在 System.Data.Entity.Core.Metadata.Edm.MetadataCache.GetArtifactLoader(DbConnectionOptions effectiveConnectionOptions) 在 System.Data.Entity.Core.Metadata.Edm.MetadataCache.GetMetadataWorkspace(DbConnectionOptions effectiveConnectionOptions) 在 System.Data.Entity.Core.EntityClient.EntityConnection.GetMetadataWorkspace() 在 System.Data.Entity.Core.Objects.ObjectContext.RetrieveMetadataWorkspaceFromConnection() 在 System.Data.Entity.Core.Objects.ObjectContext..ctor(EntityConnection connection, Boolean isConnectionConstructor, ObjectQueryExecutionPlanFactory objectQueryExecutionPlanFactory, Translator translator, ColumnMapFactory columnMapFactory) 在 System.Data.Entity.Internal.InternalConnection.CreateObjectContextFromConnectionModel() 在 System.Data.Entity.Internal.LazyInternalConnection.CreateObjectContextFromConnectionModel() 在 System.Data.Entity.Internal.LazyInternalContext.InitializeContext() 在 System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) 在 System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() 在 System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() 在 System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() 在 System.Linq.Queryable.Where[TSource](IQueryable`1 source, Expression`1 predicate) 在 ExclusiveRecommended.RecommendedJob.Execute(IJobExecutionContext context)

错误日志

<add name="SF_LCEntities" connectionString="metadata=res://*/SFBOS.csdl|res://*/SFBOS.ssdl|res://*/SFBOS.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=192.168.1.18\Dev;initial catalog=xxx;user id=xxxx;password=xxx;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

将上面红色部分替换成   .edmx 文件名

 

事务写法的差异

 1       using (var db = new SFBOSEntities()) 2       { 3         db.Connection.Open(); 4         using (var ts = db.Connection.BeginTransaction()) 5         { 6           try 7           { 8  9           }10           catch (Exception ex)11           {12             ts.Rollback();13           }14           finally15           {16             db.Connection.Close();17           }

旧版本事务写法
 1       using (var db = new SFLCEntities()) 2       { 3         db.Database.Connection.Open(); 4  5         using (var ts = db.Database.Connection.BeginTransaction()) 6         { 7           try 8           { 9             db.Database.UseTransaction(ts);10 11           }12           catch (Exception ex)13           {14             ts.Rollback();15 16           }17           finally18           {19             db.Database.Connection.Close();20           }21         }22       }

新版本事务写法

 

如果分配给命令的连接位于本地挂起事务中,ExecuteNonQuery 要求命令拥有事务。命令的 Transaction 属性尚未初始化

出现此错误请看新版本事务中有多出一行代码  db.Database.UseTransaction(ts);  加上这句问题解决