c# - 将连接字符串传递给 Entity Framework 6

标签 c# entity-framework

我在类库中使用 EF6(数据库优先)

当我按照向导添加表时,我选择不在 app.config 中存储连接字符串,而是发送连接字符串。

我以前没有这样做过。通常我选择将连接字符串放在 app.config 文件中。

我现在完全不知道我是如何调用一个函数并将连接字符串传递给它的。

我希望以下是我的解决方案中的相关代码片段。

在 app.config 中 - EF 自动添加了这个:

<connectionStrings>
<add name="cerviondemoEntities" connectionString="metadata=res://*/DatabaseModel.cervionEDM.csdl|res://*/DatabaseModel.cervionEDM.ssdl|res://*/DatabaseModel.cervionEDM.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=DEVBOX;initial catalog=cerviondemo;user id=sa;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

我自动生成的上下文类如下所示:

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated from a template.
//
//     Manual changes to this file may cause unexpected behavior in your application.
//     Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace CervionFunctions.DatabaseModel
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;

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

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

    public virtual DbSet<Customer> Customers { get; set; }
    public virtual DbSet<Ticket> Tickets { get; set; }
}
}

最终,我尝试调用以下测试函数:

public static List<Customer> customersToUpdate()
    {
        cerviondemoEntities db;

        using (db = new DatabaseModel.cerviondemoEntities())
        {
            var result = from customers in db.Customers
                         select customers;

            return result.ToList();
        }
    }

我不知道如何将连接字符串发送到该函数。

最佳答案

按照惯例, Entity Framework 采用与上下文同名的连接字符串。 例如:

public cerviondemoEntities()
    : base("name=cerviondemoEntities")
{
}

DbContext 类有一个采用连接字符串的构造函数。您可以添加另一个将连接字符串作为参数的构造函数,并将其传递给基本构造函数。

public cerviondemoEntities(string connectionString) : base(connectionString)
{
}

一定要创建一个分部类,这样你添加的构造函数就不会被覆盖。

示例连接字符串:

<connectionStrings>
    <add name="cerviondemoEntities" connectionString="data source=server\database;initial catalog=catalog;persist security info=True;user id=user;password=password;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> 
</connectionStrings>

关于c# - 将连接字符串传递给 Entity Framework 6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24240761/

相关文章:

c# - 为什么我的 ASP.NET MVC 4 应用程序创建新实体而不是更新旧实体?

c# - 使用 C# 在预印纸表格的特定位置打印文本

C# Linq 多个查询在一个单一的

c# - 进行回滚 - 存储库集成测试

javascript - 通过 T-SQL 查询或 C# 或 Javascript/AngularJs 1 从多列和行中获取具有最高日期的记录

c# - 从现有数据库 EF 5 生成 POCO(满足某些条件)

entity-framework - 如何将用户管理器包含到 ASP.NET Core 3.1 的另一个应用程序中

C#:如何从另一个类更改 form1 中标签的文本?

c# - 作为文本输入的时间之间的差异

Java 与 C# 毫秒时间戳生成