2014-09-03 62 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(); 
}