【问题标题】:How can I separate "Data" from my console application?如何从我的控制台应用程序中分离“数据”?
【发布时间】:2011-06-20 01:19:53
【问题描述】:

我有两个项目:

  • 控制台应用程序
  • 类库

我希望Class library 定义类、创建 edmx 文件并拥有部分连接字符串,例如:

<add name="BlogEntities" connectionString="metadata=res://*/Blog.csdl|res://*/Blog.ssdl|res://*/Blog.msl;provider=System.Data.SqlClient;provider connection string='{0}'" providerName="System.Data.EntityClient" />

我希望我的类库定义 csdlssdlmsl 文件。我的控制台应用程序不关心元数据,它只会定义databaseuserpassword

我怎样才能像这样将连接字符串一分为二?

【问题讨论】:

    标签: c# database entity-framework class-library


    【解决方案1】:

    根据我的记忆,如果你在类库中创建模型,VS 会在库项目中创建一个 app.config。

    只需将该文件的内容合并到控制台库的app.config中即可。

    在这种情况下,您可以在 lib 的 app.config 文件中进行“设计”配置,并在控制台应用程序的 app.config 中进行运行时配置。

    【讨论】:

    • 我想要一个 plug and play 库。如果我需要复制 app.config,这意味着我需要访问项目文件...
    • 配置文件未编译。它只是应用程序文件夹中的一个文本文件。如果您需要交互设置,我认为 ObjectContext 类的构造函数有重载(但我可能错了)
    【解决方案2】:

    在您的库中创建一个类(例如Connector),允许您提供所需的任何连接值(数据库、用户、密码)。然后在您的控制台应用程序中使用此类并提供您认为合适的必要值。

    【讨论】:

      【解决方案3】:

      我发现我可以用相同的名称命名所有实体,例如Entities。我的app.config 需要在控制台应用程序上,但我可以使用单个ConnectionString

      <add name="Entities" connectionString="metadata=res://*/;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQLExpress;Initial Catalog=Test;Persist Security Info=True;User ID=test;Password=test;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
      

      元数据可以设置为res://*/,它将在全球范围内工作。 From MSDN:

      模型和映射元数据由 实体框架被加载到 元数据工作区。这个元数据是 全局缓存,可用于 ObjectContext 的其他实例 相同的应用程序域。

      我还可以强制任何可插入模块使用ConnectionString 传递上下文构造函数:

      new Blogs.Data.Entities("name=Entities");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-30
        • 1970-01-01
        • 1970-01-01
        • 2013-02-11
        • 1970-01-01
        • 2013-07-13
        相关资源
        最近更新 更多