ADO.NET实体连接字符串多个项目

问题描述:

我使用的多层项目中,数据模型承载ADo.NET实体模型和数据访问层做验证。ADO.NET实体连接字符串多个项目

但是每次我得到这样

指定命名的连接或者未在配置中找到一个错误,不打算与EntityClient提供者,或者不是有效的使用。

我试图连接字符串

<add name="SalesEntities" connectionString="metadata=res://*/SalesEntities.csdl|res://*/SalesEntities.ssdl|res://*/SalesEntities.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.;Initial Catalog=Phoenix;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

<add name="SalesEntities" connectionString="metadata=.\SalesEntities.csdl|.\SalesEntities.ssdl|.\SalesEntities.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.;Initial Catalog=Phoenix;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

也尝试过其他的组合,是指被叫项目目录,但没有运气的根目录。

任何帮助,高度赞赏。非常感谢,一如既往:)。

你必须把那些连接字符串中的每个应用程序的app.config文件。如果您有一个您生成模型的DAL,然后尝试在EXE中使用DAL,则会发生同样的情况。 EXE不知道连接字符串。

我发现的最简单的方法是在每个项目上放置一个app.config,并从DAL中复制连接字符串,然后在最初生成模型。然后每个将有一个相同的连接字符串的副本。

+3

HM,是它在某种程度上可以存储在一个地方所有的连接字符串,然后“告诉”给所有的Web.config文件在哪里可以找到连接字符串? – Tony 2010-10-21 19:10:18

我添加了同样的问题,试图单元测试我DAL。我发现这工作:

<add name="SalesEntities" connectionString="metadata=res://*;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.;Initial Catalog=Phoenix;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /> 

我有一个WinForms项目有类似的问题,尽管乱投医,直到我删除了我能找到与之相关的网页上解决不了我的问题.....从我的BaseForm到我使用ObjectContext(私有CubEntities _oc = new CubEntities())的字段,以及使用它的实际表单。

如果您复制App.Config文件到主项目,并与正常'字符替换所有&quot;它应该运行

我通过了entityconnectionstring到ObjectContext的类的所有实例和它现在的工作。

但其开销太大,创建具有的ConnectionString属性,并把它当作参数传递给每个实例

我建议在上面给出的建议有轻微的变化。

这不是一个巨大的进步,但至少它给你的关注一些分离。

当EF向导创建.edmx文件及其关联的.Designer .cs文件时,C#代码将声明一个部分类。因此,您可以简单地将另一个.cs文件添加到包含两个EDM文件的项目中。

这个新的文件定义了相同的命名空间和类的附加静电功能。

这个新的静态函数将返回所需的类型(ObjectContext中的后裔)的一个实例。

新的文件是一个单独的文件,所以它不会被覆盖,如果你重新创建的.edmx和了.Designer.cs。

您复制并粘贴在EDM项目,这是怎样的一个黑客攻击的的.config连接字符串,但至少它让隐藏在EDM项目的连接字符串。

新的文件看起来是这样的:

namespace MyNamespace 
{ 
    public partial class MyEntities : ObjectContext 
    { 
    public static MyEntities New_MyEntities() 
    { 
     string connStr; 
     MyEntities theContext; 

     connStr = "metadata=res://*/MyClass.csdl|res://*/MyClass.ssdl|res://*/MyClass.msl;provider=System.Data.SqlClient;provider connection string=\"Data Source=localhost\\SQLSERVER;Initial Catalog=MyDb;Integrated Security=True;MultipleActiveResultSets=True\""; 
     // set the connection string 

     theContext = new MyEntities(connStr); 
     // allocate it 

     return theContext; 
     // return it 
    } 
    } 
} 

要获得一个新的实体对象,您只需拨打您的电话工程静态函数New_MyEntities()。

我有同样的问题,我&尝试所有提到的方法。最后我解决了它,如上所述。在我的情况下,我有单独的数据层和表示层。在我的app.config(数据层),我有这样的连接。

<add name="LibraryMgtSysEntities" connectionString="metadata=res://*/DataLibraryMgtSys.csdl|res://*/DataLibraryMgtSys.ssdl|res://*/DataLibraryMgtSys.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=abc;initial catalog=LibraryMgtSys;Persist Security Info=True;user id=sa;password=123;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /> 

在我web.config我手动配置连接如下:

<add name="DefaultConnection" providerName="System.Data.SqlClient" 
connectionString="Data Source=abc; 
Initial Catalog=LibraryMgtSys; 
Integrated Security=SSPI; 
user id=sa;password=123;" /> 

它给我相同的异常如上所述。所以我通过在web配置文件中添加app.config值来解决它。

我最后web.config文件,如下所示:

<connectionStrings> 
    <clear /> 
    <add name="LibraryMgtSysEntities" connectionString="metadata=res://*/DataLibraryMgtSys.csdl|res://*/DataLibraryMgtSys.ssdl|res://*/DataLibraryMgtSys.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=TILANITHOTAMUNE\SQLEXPRESS;initial catalog=LibraryMgtSys;Persist Security Info=True;user id=sa;password=testing;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /> 
    <add name="DefaultConnection" providerName="System.Data.SqlClient" 
     connectionString="Data Source=abc; 
     Initial Catalog=LibraryMgtSys; 
     Integrated Security=SSPI; 
     user id=sa;password=123;" /> 
    </connectionStrings> 

我有问题在我的项目之一,是要求一个工作,一个Web应用程序和测试项目实体框架的连接字符串。要解决这个问题的方法之一是以下几点:

1)使用的UnitOfWork(或类似)的模式。这允许控制数据上下文的创建和操纵连接字符串

public partial class MyContext 
{ 
    #region Members 
    private static readonly object objSync = new object(); 
    private static readonly string DATACONTEXT_KEY = "MyContext_UserInstance"; 
    // TODO: read from a place accesible to all deployed projects 
    // remove hardcoded database 
    private static readonly string DefaultConnectionString = @"metadata=res://*/MyContext.csdl|res://*/MyContext.ssdl|res://*/MyContext.msl;provider=System.Data.SqlClient;provider connection string='data source=Server;initial catalog=MyDatabase;integrated security=True;multipleactiveresultsets=True;App=EntityFramework'"; 

    private static string connectionString; 
    #endregion 

    public MyContext(String connectionString) : base(connectionString) 
    { 
    } 

    /// <summary> 
    /// Uses a UnitOfWorkStore to return the same instance of MyContext, that is unique 
    /// per user, per postback (or CallContext, if not in an HttpContext environment, such as unit tests or console apps) 
    /// </summary> 
    public static MyContext Instance 
    { 
     get 
     { 
      // Dirty (non thread-safe) check 
      if (UnitOfWorkStore.GetData(DATACONTEXT_KEY) == null) 
      { 
       lock (objSync) 
       { 
        // Thread-safe check 
        if (UnitOfWorkStore.GetData(DATACONTEXT_KEY) == null) 
        { 
         MyContext context = new MyContext(DefaultConnectionString); 
         connectionString = context.Database.Connection.ConnectionString; 
         UnitOfWorkStore.SetData(DATACONTEXT_KEY, context); 
        } 
       } 
      } 
      return (MyContext)UnitOfWorkStore.GetData(DATACONTEXT_KEY); 
     } 
    } 

} 
  1. 数据上下文应该允许直接连接字符串输入:

    公共MyContext(字符串的connectionString):基座(的connectionString) {}

开始=>