2014-09-03 3 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, я получаю исключение из свойство DialectProvider класса OrmLiteConfig: «Вы должны установить singleton« 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(); 
}