C# EF6应用程序代码
我正在迁移到EntityFrameworkV6,我正在努力构建代码,以便在代码中定义SQL 2008R2数据库连接。我无法在app.config文件中存储连接字符串信息,因为此库是多个应用程序将使用的dll。其思想是维护1个dll中的所有数据库连接,而不必在前端引用实体库,也不必指定连接字符串 对于EF5,我能够使用分部类并在DBContext中定义连接字符串,该方法似乎不适用于EF6。我想要一个完全在代码中定义的EF6SQL数据库连接示例。EF6的大多数示例都是针对代码优先模型的,我已经有了数据库表,我只需要构建接口C# EF6应用程序代码,c#,sql-server,entity-framework-6,C#,Sql Server,Entity Framework 6,我正在迁移到EntityFrameworkV6,我正在努力构建代码,以便在代码中定义SQL 2008R2数据库连接。我无法在app.config文件中存储连接字符串信息,因为此库是多个应用程序将使用的dll。其思想是维护1个dll中的所有数据库连接,而不必在前端引用实体库,也不必指定连接字符串 对于EF5,我能够使用分部类并在DBContext中定义连接字符串,该方法似乎不适用于EF6。我想要一个完全在代码中定义的EF6SQL数据库连接示例。EF6的大多数示例都是针对代码优先模型的,我已经有了数
-Hiram您仍然可以在EF6中的DBContext中定义连接字符串
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext()
: base(@"Your connection string here") { }
// Rest of your DbContext code
}
但是硬编码连接字符串并不是很通用。即使您的DbContext
将位于它自己的dll中,但如果它位于同一个解决方案中,它仍然可以读取主项目的app.config
或web.config
(我相当肯定,即使您添加DbContext
dll作为参考,它也会工作)
只需在DbContext
项目中添加对System.Configuration
的引用,然后就可以使用ConfigurationManager.ConnectionStrings[“MyConnectionStringName”].ConnectionString
或ConfigurationManager.AppSettings[“MyConnectionStringName”]
您可以将连接字符串存储在
部分的主应用程序web.config
或
部分的“app.config”中
请注意,如果您这样做(通过读取web.config
或app.config
),您应该相应地更改DbContext
代码:
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext()
: base("MyConnectionStringName") { }
// Rest of your DbContext code
}
(假设您使用的是EF设计器)
在使用从EF6设计器生成的代码时,不能只将连接字符串传递给DbContext,因为DbContext需要从EDMX创建的信息。但您仍然可以创建一个分部类,该分部类具有接受连接字符串的构造函数。您只需创建ObjectContext并将其传递给DbContext构造函数
以下是一个例子:
using System.Data.Entity.Core.EntityClient;
using System.Data.Entity.Core.Metadata.Edm;
using System.Data.Entity.Core.Objects;
using System.Data.SqlClient;
namespace Northwind.Model {
public partial class NorthwindEntities {
public NorthwindEntities(string connectionString)
: base(GetObjectContext(connectionString), true) {
}
private static ObjectContext GetObjectContext(string connectionString) {
// You can use the metadata portion of the connection string the the designer added to your config for the paths
var paths = new[] {
"res://*/Northwind.csdl",
"res://*/Northwind.ssdl",
"res://*/Northwind.msl"
};
var workspace = new MetadataWorkspace(paths, new[] { typeof(NorthwindEntities).Assembly });
var connection = new EntityConnection(workspace, new SqlConnection(connectionString));
return new ObjectContext(connection);
}
}
}
为什么每个应用程序都不能有自己的app.config文件?另外,您是说要在您提到的1个DLL中维护所有数据库连接字符串或连接对象吗?请澄清。场景是这样的:DLL维护到数据库的所有连接。所有连接字符串等等。子应用程序只需调用DLL并将DLL视为黑盒。在当前的开发中,当我使用同一解决方案(或不同的解决方案)中的另一个项目引用DLL时,它会抱怨找不到连接字符串。我认为将连接字符串编码到DLL本身可以消除这种混淆。