我已经使用数据库优先方法创建了模型。问题是我的连接字符串在运行时更改。因此,我为采用连接字符串的DBContext类添加了一个重载的构造函数。
public partial class MyDataContext: DbContext
{
public MyDataContext: ()
: base("name=DbEntities")
{
}
// added this overloaded contructor
public MyDataContext: (string connectionString)
: base(connectionString)
{
}
我在运行时获得的连接字符串如下所示。
Integrated Security=SSPI;Data Source=localhost\sqlexpress;initial catalog=MyDatabase;Max Pool Size=100;Min Pool Size=20;Connect Timeout=15;
但是,当我使用通过重载构造函数创建的MyDataContext运行查询时,出现以下错误。
System.Data.Entity.Infrastructure.UnintentionalCodeFirstException:上下文在代码优先模式下使用,该上下文是从EDMX文件生成的,用于数据库优先或模型优先开发。这将无法正常工作。若要解决此问题,请不要删除引发此异常的代码行。如果希望使用数据库优先或模型优先,请确保在启动项目的app.config或web.config中包含Entity Framework连接字符串。如果要创建自己的DbConnection,请确保它是EntityConnection而不是其他类型的DbConnection,并将其传递给采用DbConnection的基本DbContext构造函数之一。要了解有关代码优先,数据库优先和模型优先的更多信息,请参见此处的实体框架文档:http://go.microsoft.com/fwlink/?LinkId=394715
知道如何实现吗?
您需要创建一个EntityConnectionString并将其传递给DbContext。您当前仅使用SqlConnectionString。我建议您看看EntityConnectionStringBuilder。
这是一个可以用于Sql Database First方法的示例。
SqlConnectionStringBuilder sqlStringBuilder = new SqlConnectionStringBuilder();
sqlStringBuilder.Database = "database name":
sqlStringBuilder.Password = "password";
sqlStringBuilder.UserID = "userid";
// other properties
EntityConnectionStringBuilder entityStringBuilder = new EntityConnectionStringBuilder();
entityStringBuilder.ProviderConnectionString = sqlBuilder.ConnectionString;
entityStringBuilder.Provider = "System.Data.MySqlClient";
entityStringBuilder.Metadata = "resx//*/YourDbContext.csdl|resx//*/YourDbContext.ssdl|resx//*/YourDbContext.msl";
MyDbContext dbContext = new MyDbContext(entityStringBuilder.ConnectionString);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句