EF6应用程序代码

时间:2013-12-13 17:39:12

标签: c# sql-server entity-framework-6

我正在迁移到Entity Framework v6,我正在努力构建代码,让我在代码中定义我的SQL 2008R2数据库连接。我无法在app.config文件中存储连接字符串信息,因为这个库是多个应用程序将使用的DLL。我们的想法是在1 dll内维护所有数据库连接,而不必引用前端的实体库,也不必指定连接字符串。

使用EF5,我能够使用部分类并在DBContext中定义连接字符串,该方法似乎不适用于EF6。我想要一个在代码中完全定义的EF6 SQL数据库连接的示例。 EF6的大多数示例都是代码优先模型,我已经有了数据库表,我只需要构建接口。

-Hiram

2 个答案:

答案 0 :(得分:1)

您仍然可以在EF6中的DBContext中定义连接字符串。

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext()
        : base(@"Your connection string here") { }

 // Rest of your DbContext code

}

但是在那里对连接字符串进行硬编码并不是很通用。即使您的DbContext将在其自己的dll中,但如果它位于同一解决方案中,它仍然可以读取您的主要项目的app.configweb.config(我很确定它即使您添加DbContext dll作为参考,也会有效。

只需在System.Configuration项目中添加对DbContext的引用,然后您就可以使用ConfigurationManager.ConnectionStrings["MyConnectionStringName"].ConnectionStringConfigurationManager.AppSettings["MyConnectionStringName"]

获取连接字符串

您可以将连接字符串存储在web.config部分的主要应用<connectionStrings><appSettings>部分的'app.config'中

请注意,如果您这样做(通过阅读web.configapp.config),则应相应更改DbContext代码:

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext()
        : base("MyConnectionStringName") { }

 // Rest of your DbContext code

}

答案 1 :(得分:1)

(假设您使用的是EF Designer)

使用从EF6 Designer生成的代码时,不能只将连接字符串传递给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);
        }
    }
}