实体框架-冗余连接字符串我在项目中使用的是EntityFramework4。该框架已经创建了自己的连接字符串,因此我的web.configconnectionStrings部分文件如下所示:第一个名为ApplicationServices的连接字符串是我的原始连接字符串。第二个称为VNKEntities,是在生成模型时创建的。当我检查生成的*.edmx文件时,我看到这个模型正在引用它的连接字符串,如下所示://////使用在应用程序配置文件的“VNKEntities”部分中找到的连接字符串初始化一个新的VNKEntities对象.///publicVNKEntities():base("name=VNKEntities","VNKEntities"){this.ContextOptions.LazyLoadingEnabled=true;OnContextCreated();我的问题是如何摆脱VNKEntities连接字符串,只保留我将从我的模型中引用的ApplicationServices?我猜数据库只有一个连接字符串,因为我只使用一个数据库(将name=VNKEntities的构造函数参数替换为name=ApplicationServices不起作用)。问候手动创建DbConnection从普通连接字符串手动创建MetadataWorkspace对象。使用此ctor创建EntityConnection。将实体连接传递给ObjectContext构造函数。虽然您可以在代码中创建连接,正如@gandjustas指出的那样(+1),但您无法摆脱连接字符串或EntityConnection。那是因为它并不是真正多余的。是的,数据库连接部分是多余的,@gjjasas向您展示了如何删除冗余。但是,实体框架连接字符串还包含有关在您希望保留的连接字符串中找不到的模型的信息。该模型信息必须来自某个地方。如果您要消除EntityFramework的连接字符串并在ObjectContext上使用参数列表构造函数,您将消除对模型的所有引用。我也有同样的问题。我是通过以下方式解决的:我创建了两个edmx文件,但是在创建第二个edmx文件的时候,忽略了配置文件中要保存的连接字符串。这样我的配置文件将只包含一个连接字符串。然后我修改了我的连接字符串中的以下行:只需将“res://model1.csdl”替换为“res://*/”,它就像一个魅力。您可以在dbcontext类的构造函数中指定此连接名称,例如:publicMyDbContext():base("name=NameOfYourConnectionString")//连接字符串的名称{}注意:我使用的是EntityFramework5.0。我将提供一个完整的实现来解决这个问题(基于gandjustas提示)。我已经为上下文编写了一个简单的包装器,可以按如下方式使用:using(varwrapper=newContextWrapper()){//doyourstuffbasedonwrapper.Context}上下文以其他方式构造(仅使用连接字符串),然后通过属性公开。其内部具体如下:publicclassContextWrapper:IDisposablewhereTContext:ObjectContext{privateTContext_context;私有EntityConnectionManager_manager;私人布尔_disposed;publicContextWrapper():this(true){}publicContextWrapper(boollazyLoadingEnabled){_disposed=false;_manager=newEntityConnectionManager();_context=(TContext)Activator.CreateInstance(typeof(TContext),_manager.Connection);_context.ContextOptions.LazyLoadingEnabled=lazyLoadingEnabled;}~ContextWrapper(){处置(false);}publicTContextContext{get{return_context;}}publicvoidDispose(){Dispose(true);GC.SuppressFinalize(这个);}protectedvirtualvoidDispose(booldisposing){if(!_disposed){if(disposing){if(_manager!=null){_manager.Dispose();_manager=null;}varctx=_context作为IDisposable;if(ctx!=null){ctx.Dispose();_上下文=空;}}}_disposed=true;您可以看到名为EntityConnectionManager的自定义类的使用方法:内部类EntityConnectionManager:IDisposable{privateDbConnection_connection;私有实体连接_entityConnection;私人挥发布尔_disposed;publicEntityConnectionManager(){varworkspace=newMetadataWorkspace(Setting.MetadataWorkspacePaths.Split('|'),new[]{Assembly.ReflectionOnlyLoad(Setting.MetadataAssemblyNameToConsider)});_connection=newSqlConnection(Setting.ConnectionString);_entityConnection=newEntityConnection(工作区,_connection);_disposed=假;}publicEntityConnectionConnection{get{return_entityConnection;}}publicvoidDispose(){Dispose(true);GC.SuppressFinalize(这个);}protectedvirtualvoidDispose(booldisposing){if(!_disposed){if(disposing){if(_connection!=null){_connection.Dispose();_连接=空;}if(_entityConnection!=null){_entityConnection.Dispose();_entityConnection=null;}}}_disposed=true;所以现在你可以有一个连接字符串:和在应用程序设置部分定义的元数据(第二个关键点指向实际的内存域模型Typeassembly):Setting类型的逻辑非常简单,因为它只是从配置文件中提取设置。以上就是C#学习教程:实体框架-冗余连接字符串。更多关于C#学习教程,希望大家多多关注~本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
