FluentNhibernate没有创建Id列作为SQL CE 4.0的标识

时间:2011-11-07 13:44:19

标签: nhibernate fluent-nhibernate sql-server-ce integration-testing

我正在尝试创建一些没有外部数据库依赖性的集成测试,所以我正在使用SQL CE 4.0并尝试使用FluentNhibernate进行配置。

我已经让测试每次运行时创建数据库文件,然后创建我想要使用的表,但它永远不会将Id列设置为身份规范。当我尝试使用Nhibernate插入表时,它会抱怨null标识列。

这是我的映射防御和数据类:

public class AffiliateApplicationRecord
{
    public virtual int Id { get; private set; }
    public virtual string CompanyName { get; set; }
    public virtual string Email { get; set; }
    public virtual string DomainName { get; set; }
    public virtual DateTime DateReceived { get; set; }

    public AffiliateApplicationRecord()
    {
        DateReceived = DateTime.Now;
    }
}

public class AffiliateApplicationRecordMap : ClassMap<AffiliateApplicationRecord>
{
    public AffiliateApplicationRecordMap()
    {
        Table("Partner");
        Id(x => x.Id).GeneratedBy.Identity();
        Map(x => x.CompanyName, "Name");
        Map(x => x.DomainName, "Domain");
        Map(x => x.Email);
        Map(x => x.DateReceived, "TimeStampCreated");
    }
}

这些是配置会话工厂的方法,我在我的存储库中调用它来获取会话工厂来运行查询/插入数据。

编辑:添加了方言配置......

private ISessionFactory CreateSessionFactory()
    {

        var config = Fluently.Configure()
            .Database(
                MsSqlCeConfiguration.Standard
                    .Dialect<MsSqlCe40Dialect>()
                    .ConnectionString("Data Source=DatabaseFileName.sdf"))
            .Mappings(m => m.FluentMappings.AddFromAssembly(typeof(AffiliateApplicationRecord).Assembly))
            .ExposeConfiguration(BuildSchema)
            .BuildConfiguration()

        return config.BuildSessionFactory();
    }

    private static void BuildSchema(Configuration config)
    {
        new SchemaExport(config).Create(false, true);
    }

我真的很感激这方面的帮助。我担心Fluent不会为我做这个,或者SQL CE不会工作。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

在使用SQLCe工具箱后,我意识到正在使用标识列正确创建表,并且我看到的问题(AssertionFailure:“null identifier”)实际上是由此处描述的SQL CE中的错误引起的...

AssertionFailure: "null identifier" - FluentNH + SQLServerCE

非常感谢SO

答案 1 :(得分:0)

尝试使用MsSqlCe40Dialect而不是MsSqlCeDialect。