2

干杯全部,实体框架:与动态连接字符串错误

我正在使用实体框架模型。我需要通过我的连接字符串参数一样,因此,在另一个文件中,我已经写了(从this question):

namespace MyNamespace.Model 
{ 
    using System; 
    using System.Data.Entity; 
    using System.Data.Entity.Infrastructure; 

    public partial class MyEntities: DbContext 
    { 
     public MyEntities(string nameOrConnectionString) : base(nameOrConnectionString) 
     { 

     } 
    } 
} 

当我启动应用程序,我称这种构造以这种方式,所以我可以参考这从反正在app:

public static MyEntities dbContext = 
         new MyEntities(mdlImpostazioni.SetConnectionString()); 

其中mdlImpostazioni.SetConnectionString()返回一个字符串(该数据是正确的):

server=192.168.1.100\SVILUPPO;database=MyDB;uid=myName;pwd=111111; 

当我执行这个代码,这似乎是所有好了,但是当我尝试做出那样的查询:

var query = (from r in MainWindow.dbContext.TabTipoSistema select r); 

它抛出从这里异常:

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

说:

附加信息:使用T4生成的代码如果在代码优先模式下使用,Database First和Model First开发的模板可能无法正常工作。要继续使用Database First或Model First,请确保在运行的应用程序的配置文件中指定了实体框架的连接字符串。要使用这些由Code First或Model First生成的类,使用Code First添加任何使用属性或API DbModelBuilder的附加配置,并删除引发此异常的代码。

堆栈跟踪是:

在MyNamespace.Model.MyEntities.OnModelCreating(DbModelBuilder模型构建器)在C:\型号\ Model.Context.cs:行25 在System.Data .Entity.DbContext.CallOnModelCreating(DbModelBuilder模型构建器)在System.Data.Entity.Internal.LazyInternalContext.CreateModelBuilder () 在System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) 在System.Data.Entity的。 Internal.RetryLazy`2.GetValue(TInput input)*

InnerException为null。

错误在哪里?

回答

0

我相信你有更新的App.config部分

不知道,但这个工作对我来说,因为我使用SQLServer的不是一个本地文件。

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
    <parameters> 
    <parameter value="Data Source=MyServer; Integrated Security=True; MultipleActiveResultSets=True" /> 
    </parameters> 
</defaultConnectionFactory> 
2

你不能仅仅通过构造函数使用简单类型的连接字符串作为实体框架。 我只是用下面的函数来获得一个实体兼容的。

不要忘记将'YourDBModel'更改为您正在使用的任何型号。

/// <summary> 
    /// Returns an Entity Connectionstring ready to be used in a EF6 contructor 
    /// </summary> 
    /// <param name="connectionString">plain connectionstring</param> 
    /// <returns>entity connectionstring</returns> 
    public string GetEntityConnectionString(string connectionString) 
    { 
     var entityBuilder = new EntityConnectionStringBuilder(); 

     entityBuilder.Provider = "System.Data.SqlClient"; 
     entityBuilder.ProviderConnectionString = connectionString; 

     // -- WARNING -- 
     // Check your app config and set the appropriate DBModel (do not just let this be YourDBModel) 
     entityBuilder.Metadata = @"res://*/DB.YourDBModel.csdl|res://*/DB.YourDBModel.ssdl|res://*/DB.YourDBModel.msl"; 

     var ret = entityBuilder.ToString(); 

     return ret; 
    } 

您可能还需要添加以下到您的ConnectionString

entityBuilder.ProviderConnectionString = connectionString; + ";MultipleActiveResultSets=True;App=EntityFramework;";