Entity Framework - Database First without config

百般思念 提交于 2019-12-19 09:53:03

问题


I'm developing a class library that deals with an exiting db using EF. I want to avoid the consumer of the class library (and .exe or a web site) to have in the *.config file the Entity connection string. I want the connection string set a run-time.

How do I set the connection string with Database First approach? There is no constructor overload that takes a connection string and when I created one (in a separate partial class) I got an "UnintentionalCodeFirstException".

I have reviewed already the following links:

  • Is there a way to change connection string in database first?. Its about modifying the connection string in the config file, which I want to avoid, also because it would recycle the process (in the case of a web app)
  • How can l use Entity Framework without App.config. Not good because it uses ObjectContext and I need the context generated when I imported the database.

回答1:


There is a constructor on DbContext that takes a DbConnection, and you need to use an EntityConnection object for it:

SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();

// Set the properties for the data source.
sqlBuilder.DataSource = "server name";
sqlBuilder.InitialCatalog = "database name";
sqlBuilder.IntegratedSecurity = true;

// Build the SqlConnection connection string.
string providerString = sqlBuilder.ToString();

var entityBuilder = new EntityConnectionStringBuilder();

// Initialize the EntityConnectionStringBuilder.
//Set the provider name.
entityBuilder.Provider = "System.Data.SqlClient";

// Set the provider-specific connection string.
entityBuilder.ProviderConnectionString = providerString;

// Set the Metadata location.
entityBuilder.Metadata = @"res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl";

using(var context = new YourDbContext(entityBuilder.ToString())){
    //do stuff here
}

The important thing to note is the metadata part - "Model1" obviously needs to be replaced for your model name.

Ref: http://msdn.microsoft.com/en-us/library/bb738533.aspx

EDIT 20/02/2013 22:25

So as an addition you'll need to extend the created DbContext class with a partial class that adds a constructor to support the above code, like this:

public partial class YourDbContext
{
    public YourDbContext(string connection) : base(connection) {}
}

This class needs to be in the same namespace as the DbContext that is generated by the entity framework wizard.



来源:https://stackoverflow.com/questions/14983882/entity-framework-database-first-without-config

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!