2015-04-23 14 views
5

Dostosowałem klasę ApplicationDBContext w celu otrzymania ciągu połączenia za pośrednictwem jej konstruktora. Może połączyć się z bazą danych OK, gdy zostanie wywołana bezpośrednio, ale po wywołaniu przez app.CreatePerOwnContext Nie mogę go wywołać. Definicja mojej klasy jest poniżej:Wyślij ciąg połączenia do ApplicationDBContext

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

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

Problem polega na wywołaniu przez Startup.Auth.cs w poniższym wierszu.

app.CreatePerOwinContext(ApplicationDbContext.Create); 

Sposób tworzenia bierze również ciąg połączenia, ale po nie działa

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

Produkuje się następujący błąd:

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. 

jaka jest poprawna składnia, aby wysłać połączenie ciąg do klasy ApplicationDbContext, aby kontekst Owin mógł odwoływać się do niego?

Łańcuch połączenia jest poprawny, ale dla kompletności kod, który ustawia go poniżej.

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

trudno odpowiedzieć, jeśli nie pokazać, jak jesteś przypisując wartości ConnectionString .. trzeba pokazać wszystkie istotne również użyć kodu .. debugger .. – MethodMan

+0

Łańcuch połączenia jest poprawny. Mogę połączyć się z bazą danych grzywny przy użyciu konstruktora klasy. Gdzie upadek wywołuje metodę przez app.CreatePerOwnContext. –

+0

Błąd informuje dokładnie o tym, na czym polega problem. Dlaczego nie wykonujesz prostego wyszukiwania google w poniższym 'ApplicationDbContext.Create' i szukasz przykładów .. również jeśli masz zamiar wkleić kod ... proszę pokazać cały odpowiedni kod .. nie jesteśmy czytnikami umysłu ... czy też osobne wyszukiwanie google na MSDN 'createperowincontext' – MethodMan

Odpowiedz

12

Proszę spojrzeć na declaration metody używasz:

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

on oczekuje argumentu typu Func<T>.

Więc trzeba zmienić swój kod do:

app.CreatePerOwinContext(() => ApplicationDbContext.Create(connectionString)); 
Powiązane problemy