2014-09-03 49 views
2

我在項目中同時使用ORMLite和Dapper,並且希望標準化兩個ORM使用的命名約定。爲了做到這一點,我想設置NamingStrategy這樣:你在單元測試中設置OrmLiteConfig.DialectProvider.NamingStrategy的位置?

OrmLiteConfig.DialectProvider.NamingStrategy = new OrmLiteNamingStrategyBase(); 

和單元測試,以驗證

public class BorrowerUnitTests : IDisposable  
{ 
    private readonly ServiceStackHost appHost; 

    public BorrowerUnitTests() 
    { 
     //Set ORMLite to work with columns like ColumnLikeThis 
     // OrmLiteConfig.DialectProvider.NamingStrategy = new OrmLiteNamingStrategyBase(); 

     appHost = new BasicAppHost(typeof(BorrowerServices).Assembly) 
     { 

      ConfigureContainer = container => 
      { 

       container.Register<IDbConnectionFactory>(c => 
        new OrmLiteConnectionFactory(ConfigUtils.GetConnectionString("LoanOrigination:Default"), PostgreSqlDialect.Provider)); 

       container.RegisterAutoWiredAs<Repository, IRepository>(); 
       container.RegisterAutoWired<BorrowerDomainService>(); 
      } 

     } 
     .Init(); 
    } 

    public void Dispose() 
    { 
     appHost.Dispose(); 
    } 

    [Fact] 
    public void TestPostMethod() 
    { 
     var service = appHost.Container.Resolve<BorrowerServices>(); 

     BorrowerCreate request = new BorrowerCreate(); 
     request.FirstName = "Orm"; 
     request.LastName = "Lite"; 
     request.Email = "[email protected]"; 

     var response = service.Post(request); 

     Assert.True(response.Id > 0, "Id retured from POST cannot be zero"); 
    } 

    [Fact] 
    public void TestGetMethod() 
    { 
     var service = appHost.Container.Resolve<BorrowerServices>(); 

     BorrowerGet request = new BorrowerGet(); 
     request.Id = 1; 

     var response = service.Get(request); 

     Assert.Equal("[email protected]", response.Email); 
    } 

    [Fact] 
    public void TestPutMethod() 
    { 
     var service = appHost.Container.Resolve<BorrowerServices>(); 

     BorrowerUpdate request = new BorrowerUpdate(); 
     request.Id = 5; 
     request.FirstName = "MyFirstName2"; 
     request.LastName = "MyLastName2"; 
     request.Email = "[email protected]"; 

     var response = service.Put(request); 

     Assert.True(response.FirstName == "MyFirstName2", "FirstName is noth equal"); 
    } 
} 

無論在哪裏我把NamingStrategy聲明,我得到從異常OrmLiteConfig類的DialectProvider屬性,「您必須設置單身'OrmLiteConfig.DialectProvider'以使用OrmLiteWriteExtensions」

哪裏是設置此屬性的適當位置?

謝謝 斯蒂芬

回答

6

你只需把它分配給您正在使用的DialectProvider,如:

PostgreSqlDialect.Provider.NamingStrategy = new OrmLiteNamingStrategyBase(); 

OrmLiteConfig.DialectProvider是可以手動設置單:

OrmLiteConfig.DialectProvider = PostgreSqlDialect.Provider; 
OrmLiteConfig.DialectProvider.NamingStrategy = new OrmLiteNamingStrategyBase(); 

或者隱含地用new OrmLiteConnectionFactory()構造函數運行,需要從IOC解析:

container.Register<IDbConnectionFactory>(c => new OrmLiteConnectionFactory(...)); 
using (var db = container.Resolve<IDbConnectionFactory>().Open()) 
{ 
    OrmLiteConfig.DialectProvider.NamingStrategy = new OrmLiteNamingStrategyBase(); 
}