【问题标题】:Where do you set the OrmLiteConfig.DialectProvider.NamingStrategy in a unit test?您在单元测试中在哪里设置 OrmLiteConfig.DialectProvider.NamingStrategy ?
【发布时间】:2014-09-03 02:56:51
【问题描述】:

我在一个项目中同时使用 ORMLite 和 Dapper,并且希望对两个 ORM 使用的命名约定进行标准化。为了做到这一点,我想这样设置 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 = "ormlite@servicestack.net";

        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("ormlite@servicestack.net", 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 = "MyEmail@Example.com";

        var response = service.Put(request);

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

无论我将 NamingStrategy 语句放在哪里,我都会从 OrmLiteConfig 类的 DialectProvider 属性中得到一个异常,“您必须设置单例 'OrmLiteConfig.DialectProvider' 才能使用 OrmLiteWriteExtensions”

设置此属性的合适位置在哪里?

谢谢, 斯蒂芬

【问题讨论】:

    标签: unit-testing servicestack ormlite-servicestack


    【解决方案1】:

    您可以将其分配给您正在使用的 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();
    }
    

    【讨论】:

      猜你喜欢
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多