首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用实体框架设置连接字符串

如何使用实体框架设置连接字符串
EN

Stack Overflow用户
提问于 2014-05-28 03:46:44
回答 2查看 3.9K关注 0票数 0

我将EF6与MySQL结合使用,并有一个用于多个数据库的模型。

我希望能够以我的形式设置连接设置。

如何以编程方式设置模型的连接字符串?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-28 03:52:00

你应该使用EntityConnectionFactory

这是你需要的。

代码语言:javascript
运行
复制
public string CreateConnectionString(string BasicConnectionString)
{
    //EntityConnectionFactory 
    var entityConnectionStringBuilder= new EntityConnectionStringBuilder();
    entityConnectionStringBuilder.Provider = "Your Provicer here"      //For me it is "System.Data.SqlClient";
    entityConnectionStringBuilder.ProviderConnectionString = BasicConnectionString;
    entityConnectionStringBuilder.Metadata = "res://*";
    return entityConnectionStringBuilder.ToString();
}

这里是一个示例用法

代码语言:javascript
运行
复制
MyContext ctx = new MyContext(CreateConnectionString())

*最新情况:

在使用DB first方法时,请参见以下图像

当这两个单选按钮可用时,选择第一个。然后,您将能够设置模型的连接字符串。

下面是我的上下文(尽管它是对象上下文)。但在这个问题的背景下并不重要)

代码语言:javascript
运行
复制
public partial class DataContext : ObjectContext
    {
        #region Constructors

        /// <summary>
        /// Initializes a new DataContext object using the connection string found in the 'DataContext' section of the application configuration file.
        /// </summary>
        public DataContext() : base("name=DataContext", "DataContext")
        {
            this.ContextOptions.LazyLoadingEnabled = true;
            OnContextCreated();
        }

        /// <summary>
        /// Initialize a new DataContext object.
        /// </summary>
        public DataContext(string connectionString) : base(connectionString, "DataContext")
        {
            this.ContextOptions.LazyLoadingEnabled = true;
            OnContextCreated();
        }

        /// <summary>
        /// Initialize a new DataContext object.
        /// </summary>
        public DataContext(EntityConnection connection) : base(connection, "DataContext")
        {
            this.ContextOptions.LazyLoadingEnabled = true;
            OnContextCreated();
        }

        #endregion

        #region Partial Methods

        partial void OnContextCreated();

        #endregion
    ...
    }

更新

在自动生成的实体类之外的部分类中添加要查找的构造函数:

代码语言:javascript
运行
复制
public partial class WMSChennaiDEVEntities : DbContext
{
    public WMSChennaiDEVEntities(string connectionstring)
            : base(connectionstring)
    {
    }
}

EF 5/6中没有包含此构造函数,显然是为了防止我们在需要实体连接字符串时意外地传递sql连接字符串。

票数 1
EN

Stack Overflow用户

发布于 2014-05-28 04:09:52

您必须在某个地方硬编码连接字符串。最常见的地方是app.config。

代码语言:javascript
运行
复制
    <connectionStrings>

<add name="Connection1" connectionString="Server=localhost\ServerInstance;Database=MyDB;Trusted_Connection=True;" providerName="System.Data.SqlClient" />

然后,在代码第一模型中,执行以下操作:

代码语言:javascript
运行
复制
    public class MyContext : DbContext
{
    public MyContext():base("Connection1")
    {...}

您可以看到,BCL db库和EF都是为这样的使用模式设计的。

在业务应用程序中,不希望更改UI中的连接字符串,因为用户不会经常更改db位置,除非您正在开发DB管理应用程序或安装程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23902496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档