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