2015-04-23 85 views
5

我已經自定義了ApplicationDBContext類以通過其構造函數接收連接字符串。它可以在直接調用時連接到數據庫,但通過應用程序調用時可以連接.CreatePerOwnContext我無法調用它。我的班級定義如下:發送連接字符串到ApplicationDBContext

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext(string databaseConnection) 
     : base(databaseConnection, throwIfV1Schema: false) 
    { 
    } 

    public static ApplicationDbContext Create(string databaseConnection) 
    { 
     return new ApplicationDbContext(databaseConnection); 
    } 
} 

問題是何時由以下行中的Startup.Auth.cs調用它。

app.CreatePerOwinContext(ApplicationDbContext.Create); 

的創建方法也需要一個連接字符串,但下面不工作

app.CreatePerOwinContext(ApplicationDbContext.Create(connectionString)); 

它產生以下錯誤:

Error 1 The type arguments for method 'Owin.AppBuilderExtensions.CreatePerOwinContext<T>(Owin.IAppBuilder, System.Func<T>)' cannot be inferred from the usage. Try specifying the type arguments explicitly. 

什麼是正確的語法發送連接字符串到ApplicationDbContext類,以便Owin上下文可以引用它?

連接字符串是正確的,但爲了完整性,設置它的代碼如下所示。

string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 
+0

很難回答,當你不告訴你是如何分配的ConnectionString的值..你需要顯示所有相關代碼..還使用調試器.. – MethodMan

+0

連接字符串是正確的。我可以使用類構造函數很好地連接到數據庫。我在哪裏通過app.CreatePerOwnContext調用方法。 –

+0

錯誤告訴你到底是什麼問題。爲什麼你不在下面的'ApplicationDbContext.Create'上尋找一個簡單的谷歌搜索並尋找例子..如果你要粘貼代碼..請顯示所有相關的代碼..我們不介意讀者..也做一個單獨的谷歌搜索MSDN'createperowincontext' – MethodMan

回答

12

請看看該方法的declaration您使用:

public static IAppBuilder CreatePerOwinContext<T>(
    this IAppBuilder app, 
    Func<T> createCallback) where T : class, IDisposable 

它期待的類型Func<T>的參數。

所以,你需要更改您的代碼:

app.CreatePerOwinContext(() => ApplicationDbContext.Create(connectionString));