2015-04-23 50 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));