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="data source=192.168.1.18\Dev;initial catalog=xxx;user id=xxxx;password=xxx;multipleactiveresultsets=True;application name=EntityFramework"" 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 finally 15 { 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 finally 18 { 19 db.Database.Connection.Close(); 20 } 21 } 22 }
如果分配给命令的连接位于本地挂起事务中,ExecuteNonQuery 要求命令拥有事务。命令的 Transaction 属性尚未初始化
出现此错误请看新版本事务中有多出一行代码 db.Database.UseTransaction(ts); 加上这句问题解决