我正在尝试创建一些没有外部数据库依赖性的集成测试,所以我正在使用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不会工作。
提前感谢您的帮助。
答案 0 :(得分:3)
在使用SQLCe工具箱后,我意识到正在使用标识列正确创建表,并且我看到的问题(AssertionFailure:“null identifier”)实际上是由此处描述的SQL CE中的错误引起的...
AssertionFailure: "null identifier" - FluentNH + SQLServerCE
非常感谢SO
答案 1 :(得分:0)
尝试使用MsSqlCe40Dialect而不是MsSqlCeDialect。