首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EF6应用程序代码

EF6应用程序代码
EN

Stack Overflow用户
提问于 2013-12-13 17:39:12
回答 2查看 596关注 0票数 1

我正在迁移到实体框架(),我正在努力构建代码,以便在代码中定义我的SQL2008R2数据库连接。由于此库是多个应用程序将使用的dll,因此无法将连接字符串信息存储在app.config文件中。这样做的目的是在1 dll内维护所有数据库连接,而不必引用前端的实体库或指定连接字符串。

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

-Hiram

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-13 18:44:39

(假设您使用的是EF设计器)

在使用从DbContext设计器生成的代码时,不能仅仅将连接字符串传递给EF6,因为DbContext需要从EDMX创建的信息。但是,您仍然可以创建一个具有接受连接字符串的构造函数的分部类。您只需创建一个ObjectContext并将其传递给DbContext构造函数即可。

下面是一个示例:

代码语言:javascript
运行
复制
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);
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2013-12-13 17:48:22

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

代码语言:javascript
运行
复制
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代码:

代码语言:javascript
运行
复制
public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext()
        : base("MyConnectionStringName") { }

 // Rest of your DbContext code

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

https://stackoverflow.com/questions/20572664

复制
相关文章

相似问题

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