我正在尝试创建一些没有外部数据库依赖项的集成测试,因此我使用 SQL CE 4.0 并尝试使用 FluentNhibernate 配置它。
我已经让测试在每次运行时创建数据库文件,然后创建我想要使用的表,但它从未将 Id 列设置为身份规范。当我尝试使用 Nhibernate 插入表时,它提示空标识列。
这是我的映射定义和数据类:
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");
}
}
这些是配置 session 工厂的方法,我在存储库中调用这些方法来获取 session 工厂来运行查询/插入数据。
编辑:添加方言配置...
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 不会工作。
预先感谢您的帮助。
最佳答案
使用 SQLCe 工具箱后,我意识到该表是使用标识列正确创建的,并且我看到的问题(AssertionFailure:“空标识符”)实际上是由此处描述的 SQL CE 中的错误引起的...
AssertionFailure: "null identifier" - FluentNH + SQLServerCE
非常感谢
关于nhibernate - FluentNhibernate 未使用 SQL CE 4.0 创建 Id 列作为身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8037279/