2014-01-26 20 views
1

我已經使用ServiceStack的免費版本數年,並且最近購買了v4以供項目使用。Service's Db在ServiceStack v4中爲null

我已經通過發行票據和相關的博客閱讀,但找不到我遇到的問題的任何指導......

在作出我堅持一個NullReferenceException上ServiceStack發行說明中定義的所有相應的改變.Service.get_Db()。下面是一些代碼段,這可能有助於:

Global.asax中......

using Funq; 
using ServiceStack; 
using ServiceStack.OrmLite; 
using ServiceStack.Data; 
using ServiceStack.Caching; 
using ServiceStack.MiniProfiler; 
using ServiceInterface; 
using System.Web; 
using System; 

namespace WebRole 
{ 
    public class AppHost : AppHostHttpListenerBase 
    { 
     public AppHost() : base("Web Services", typeof(CompaniesService).Assembly) { } 

     public override void Configure(Container container) 
     { 
      container.Register(new OrmLiteConnectionFactory(@"Server=tcp:myServer.database.windows.net,1433;Database=myDatabase;User ID=myUser;Password=myPassword;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;", SqlServerDialect.Provider)); 

      using (var resetCompanies = container.Resolve<ResetCompaniesService>()) 
      { 
       resetCompanies.Any(null); 
      } 

ResetCompanies.cs ...

using System; 
using System.Collections.Generic; 
using ServiceStack.OrmLite; 
using ServiceStack; 
using ServiceModel.Types; 

namespace ServiceInterface 
{ 
    [Route("/reset-Companies", "GET,POST")] 
    [Api("Resets the database back to the original Top 3 movies.")] 
    public class ResetCompanies : IReturn<ResetCompaniesResponse> 
    { 
    } 

    /// <summary> 
    ///  Define your ServiceStack web service response (i.e. Response DTO). 
    /// </summary> 
    public class ResetCompaniesResponse 
    { 
    } 



    /// <summary> 
    ///  Create your ServiceStack rest-ful web service implementation. 
    /// </summary> 
    public class ResetCompaniesService : Service 
    { 
     public static List<Company> Top3Companies = new List<Company> 
                { 
                 new Company 
                  { 
                   Code = "C1", 
                   Name = "Company 1" 
                  }, 
                 new Company 
                  { 
                   Code = "C2", 
                   Name = "Company 2" 
                  }, 
                 new Company 
                  { 
                   Code = "C3", 
                   Name = "Company 3" 
                  } 
                }; 

     public object Any(ResetCompanies request) 
     { 
      //Executes the specified delegate against the configured database. 
      Db.DropAndCreateTable<Company>(); 
      Db.SaveAll(Top3Companies); 

      return new ResetCompaniesResponse(); 
     } 
    } 
} 

的NullReferenceException異常發生在

Db.DropAndCreateTable<Company>(); 

這裏的堆棧跟蹤

at ServiceStack.Service.get_Db() 
at ServiceInterface.ResetCompaniesService.Any(ResetCompanies request) in c:\Users\me\Documents\Visual Studio 2013\Projects\Project1\ServiceInterface\ResetCompanies.cs:line 51 
at WebRole.AppHost.Configure(Container container) in c:\Users\me\Documents\Visual Studio 2013\Projects\Project1\WebRole\Global.asax.cs:line 23 
at ServiceStack.ServiceStackHost.Init() 
at WebRole.Global.Application_Start(Object sender, EventArgs e) in c:\Users\me\Documents\Visual Studio 2013\Projects\Project1\WebRole\Global.asax.cs:line 35 

有沒有人有任何想法?當然,看起來像V4,我錯過了還是我不知道的另一個重大更改...

回答

1

內置服務expects to resolve an IDbConnectionFactory,你可以通過註冊OrmLiteConnectionFactory作爲IDbConnectionFactory做,例如:

container.Register<IDbConnectionFactory>(c => 
    new OrmLiteConnectionFactory(connString, SqlServerDialect.Provider)); 
+0

啊!錯過了,感謝神話! – Drammy

相關問題