实体框架6在代码中设置连接字符串

FNR*_*FNR 12 .net c# dll entity-framework

我有一个使用Entity Framework 6进行一些数据库操作的DLL.我正在使用数据库第一种方法.关于实体框架的模型和所有内容,如App.config中的连接字符串,都是通过Visual Studio中的wizzard创建的.

所以我编译了dll并将其与相应的.config放在使用dll的应用程序所期望的文件夹中.

一切正常,直到我达到实际数据库调用的程度.我收到错误:

找不到MyDatabaseEntity的连接字符串

正如我所说,自动生成的连接字符串是在dll的配置文件中.我无法更改应用程序的App.config.但是应用程序移交了一个对象,该对象具有我自己构建连接字符串所需的所有信息.所以我正在寻找一种在不依赖配置文件的情况下在代码中设置连接字符串的方法.我找到的数据库第一种方法的所有教程都使用这种方法.我在这里发现了一条帖子,说明在创建Object时简单地将连接字符串作为参数

MyDatabaseEntities = new MyDatabaseEntities(dbConnect);
Run Code Online (Sandbox Code Playgroud)

但'MyDatabaseEntities'没有带任何参数的构造函数

public partial class MyDatabaseEntities : DbContext
{
    public MyDatabaseEntities()
        : base("name=MyDatabaseEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<MyTable> MyTable { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*rck 16

怎么样:

public partial class MyDatabaseEntities : DbContext
{
public MyDatabaseEntities(string connectionString)
    : base(connectionString)
{
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    throw new UnintentionalCodeFirstException();
}

public virtual DbSet<MyTable> MyTable { get; set; }
Run Code Online (Sandbox Code Playgroud)

}

然后像以前一样初始化数据库:

string myConnectionString = "...";
MyDatabaseEntities = new MyDatabaseEntities(myConnectionString);
Run Code Online (Sandbox Code Playgroud)

  • 我不知道base()处的字符串是连接字符串。谢谢,做到了。 (2认同)

Mah*_*hib 7

我有类似的问题。我的 Edmx 和 App.Config 在不同的项目中。我的启动项目不同,有3个不同的连接字符串,我们需要根据环境动态选择一个。所以不能使用固定的连接字符串。我使用相同的命名空间创建了 Context.cs 的部分类重载。以下是我的默认 Context.cs;

namespace CW.Repository.DBModel
{

  public partial class CWEntities : DbContext
  {
      public CWEntities()
        : base("name=CWEntities")
      {
      }

      protected override void OnModelCreating(DbModelBuilder modelBuilder)
      {
        throw new UnintentionalCodeFirstException();
      }
  ...
  ...
  }
}
Run Code Online (Sandbox Code Playgroud)

我的部分类重载;

namespace CW.Repository.DBModel
{
    public partial class CWEntities : DbContext
    {
        public CWEntities(string ConnectionString)
            : base(ConnectionString)
        {
        }        
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,由于我的连接字符串不是用于 EF,我将它们转换为 EF 连接字符串。

public static string GetEntityConnectionString(string connectionString)
    {
        var entityBuilder = new EntityConnectionStringBuilder();

        // WARNING
        // Check app config and set the appropriate DBModel
        entityBuilder.Provider = "System.Data.SqlClient";
        entityBuilder.ProviderConnectionString = connectionString + ";MultipleActiveResultSets=True;App=EntityFramework;";
        entityBuilder.Metadata = @"res://*/DBModel.CWDB.csdl|res://*/DBModel.CWDB.ssdl|res://*/DBModel.CWDB.msl";

        return entityBuilder.ToString();
    }
Run Code Online (Sandbox Code Playgroud)

最后,调用

var Entity = new CWEntities(CWUtilities.GetEntityConnectionString(ConnectionString));
Run Code Online (Sandbox Code Playgroud)


小智 5

我使用下面的代码得到了这个解决方案,我可以使用 C# 代码对连接字符串进行硬编码,而无需使用配置文件。

 public class SingleConnection
    {
        private SingleConnection() { }
        private static SingleConnection _ConsString = null;
        private String _String = null;

        public static string ConString
        {
            get
            {
                if (_ConsString == null)
                {
                    _ConsString = new SingleConnection { _String = SingleConnection.Connect() };
                    return _ConsString._String;
                }
                else
                    return _ConsString._String;
            }
        }

        public static string Connect()
        {
            //Build an SQL connection string
            SqlConnectionStringBuilder sqlString = new SqlConnectionStringBuilder()
            {
                DataSource = "SIPL35\\SQL2016".ToString(), // Server name
                InitialCatalog = "Join8ShopDB",  //Database
                UserID = "Sa",         //Username
                Password = "Sa123!@#",  //Password
            };
            //Build an Entity Framework connection string
            EntityConnectionStringBuilder entityString = new EntityConnectionStringBuilder()
            {
                Provider = "System.Data.SqlClient",
                Metadata = "res://*/ShopModel.csdl|res://*/ShopModel.ssdl|res://*/ShopModel.msl",
                ProviderConnectionString = @"data source=SIPL35\SQL2016;initial catalog=Join8ShopDB2;user id=Sa;password=Sa123!@#;"// sqlString.ToString()
            };
            return entityString.ConnectionString;
        }
Run Code Online (Sandbox Code Playgroud)

并使用 DbContext 使用如下:

Join8ShopDBEntities dbContext = new Join8ShopDBEntities(SingleConnection.ConString);
Run Code Online (Sandbox Code Playgroud)