Passing Connection String to Entity Framework 6

c# entity-framework

Question

I am using EF6 in a class library (database first)

When I followed the wizard and added my tables I selected not to store the connections string in the app.config and that I would send the connections string.

I haven't done this before. Normally I select to put the connection string in the app.config file.

I am now completely stumped how I actually call a function and pass the connection string to it.

Below are what I hope are relevant code snippets from my solution.

In the app.config - EF automatically added this:

<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>

My auto generated context class looks like this:

//------------------------------------------------------------------------------
// <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; }
}
}

Ultimately, I am trying to call the following test function:

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

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

            return result.ToList();
        }
    }

I cannot work out how to send the connection string to that function :(

Any help would be greatly appreciated!

1
22
6/16/2014 9:43:24 AM

Accepted Answer

By convention, Entity Framework takes the connection string that has the same name as the context. For example:

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

The DbContext class has a constructor that takes a connection string. You can add another constructor that takes a connectionstring as a parameter and pass it to the base constructor.

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

Be sure to create a partial class so your added constructor is not overwritten.

Sample 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>
42
1/27/2017 12:33:00 AM

Popular Answer

I had this issue as well and used the method from Daniel in the comments.

Alternatively, you can add it to the .tt file instead of creating another file and using 'partial' – Daniel K Dec 9 '16 at 19:16

Update *.Context.tt File

just replace the lines...

    public <#=code.Escape(container)#>()
    : base("name=<#=container.Name#>")
{

with the following...

public <#=code.Escape(container)#>()
    : this("name=<#=container.Name#>")
{
}

public <#=code.Escape(container)#>(String nameOrConnectionString)
    : base(nameOrConnectionString)
{

I hope this helps.



Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow