C# 实体框架数据模型和连接字符串

C# 实体框架数据模型和连接字符串,c#,entity-framework,connection-string,C#,Entity Framework,Connection String,我有两个C#.net应用程序,例如 1.一种数据访问应用程序,具有连接到数据库的实体框架数据模型。 2.一个web应用程序,它将包含第一个应用程序的dll,并通过调用dll中的函数来获取数据 我需要从第二个应用程序web配置文件中获取连接字符串,并将其传递给第一个应用程序。在第一个应用程序中,应根据第二个应用程序的连接字符串检索数据。有很多方法可以实现这一点。其中一个(我在这里不赘述)是通过某种引导加载程序—您可以通过存储库(或数据上下文)的构造函数传递连接字符串,也可以构造SqlConnect

我有两个C#.net应用程序,例如 1.一种数据访问应用程序,具有连接到数据库的实体框架数据模型。 2.一个web应用程序,它将包含第一个应用程序的dll,并通过调用dll中的函数来获取数据


我需要从第二个应用程序web配置文件中获取连接字符串,并将其传递给第一个应用程序。在第一个应用程序中,应根据第二个应用程序的连接字符串检索数据。

有很多方法可以实现这一点。其中一个(我在这里不赘述)是通过某种引导加载程序—您可以通过存储库(或数据上下文)的构造函数传递连接字符串,也可以构造
SqlConnectionStringBuilder
()

如果希望保持简单,请将连接字符串存储在web应用程序的
web.config
文件中,然后将键设置为对象的名称。假设您使用名为
MyDbContext
的对象扩展了
DbContext
。在web.config中,将以下内容作为连接字符串

<add name="MyDbContext" connectionString="<conn string>" providerName="System.Data.SqlClient" />


实体框架将自动使用此连接字符串,因为键与上下文相同。

如果dll要充当数据访问层,它应该检索数据并将其传递给web应用程序。而不是相反

如果仍然选择这样做,则必须创建一个函数,从dll的app.config中检索连接字符串并将其传递给web应用程序

要访问程序集配置文件中的连接字符串,请使用ConfigurationManager类(与web应用程序中使用的WebConfigurationManager类相反)。它使用相同的调用访问同一管理器中的配置元素,只用于一般的配置读取/写入


编辑:正如@PaulAldred Bann所提到的,如果web应用程序中也需要连接字符串“应该”存储在web应用程序配置文件中。程序集仍然可以访问此文件(您只需将设置从app.config移动到web.config。可以从那里访问它的原因是,程序集在被引用时代表调用方(在本例中为web应用程序)。

对于第二个应用程序(web应用程序n)在web.config文件中,连接字符串的形式是:但在app.config文件中的第1个应用程序(实体框架数据模型应用程序)中,连接字符串的形式是:这两个字符串的语法都不同……当我尝试这样做时,connectionString=WebConfiguration Manager.connectionString[“testConnectionString”].ConnectionString;DataAccess DataAccess=new DataAccess(ConnectionString);在连接到DB的第二个应用程序中,出现错误(参数异常:“关键字不受支持”“数据源”“)发生。我如何管理此..?我尝试了此操作,但出现了如下错误:“指定的命名连接在配置中找不到,或者不打算与EntityClient提供程序一起使用,或者无效。”@Sudha您可以发布
DbContext
类的代码和web.config文件中的连接字符串吗?连接已关闭web应用程序的web.config文件中的字符串类似,而edmx文件的designer.cs文件中的代码类似于公共部分类testEntities:ObjectContext{public testEntities():base(“name=testEntities”,“testEntities”){this.ContextOptions.LazyLoadingEnabled=true;OnContextCreated();}public testEntities(string connectionString):base(connectionString,“testEntities”){this.ContextOptions.LazyLoadingEnabled=true;OnContextCreated();}public testEntities(EntityConnection):base(connection,“testenties”){this.ContextOptions.LazyLoadingEnabled=true;OnContextCreated();}VS 2013和EF6的问题是,调用应用程序必须传递连接字符串。这是一种不良的封装。在大多数情况下,web应用程序不需要知道数据库连接(如果dll正在处理访问)。但是,MS出于某种原因需要此项。这一定是意外的副作用。