C# Fluent NHibernate PersistentSpecification测试失败
我现在有这些地图C# Fluent NHibernate PersistentSpecification测试失败,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,我现在有这些地图 public class CountryMap : ClassMap<Country> { public CountryMap() { Table("tblCountry"); Id(x => x.Id, "intCountryId"); Map(x => x.Name, "strCountryName"); HasMany(x => x.FlagImages)
public class CountryMap : ClassMap<Country>
{
public CountryMap()
{
Table("tblCountry");
Id(x => x.Id, "intCountryId");
Map(x => x.Name, "strCountryName");
HasMany(x => x.FlagImages)
.Table("tblImage")
.KeyColumn("intRelId")
.Where("intObjId=29")
.Not.Cascade.All();
}
}
public class ImageMap : ClassMap<Image>
{
public ImageMap()
{
Table("tblImage");
Id(x => x.Id, "intImgId");
Map(x => x.ObjId, "intObjId");
Map(x => x.RelId, "intRelId");
Map(x => x.ImageName, "strImage");
}
}
公共类CountryMap:ClassMap
{
公共国家地图()
{
表(“TBL国家”);
Id(x=>x.Id,“intCountryId”);
映射(x=>x.Name,“strCountryName”);
HasMany(x=>x.FlagImages)
.表格(“tblImage”)
.KeyColumn(“intRelId”)
.其中(“intObjId=29”)
.Not.Cascade.All();
}
}
公共类ImageMap:ClassMap
{
公共图像地图()
{
表(“tblImage”);
Id(x=>x.Id,“intImgId”);
Map(x=>x.ObjId,“intObjId”);
Map(x=>x.RelId,“intRelId”);
映射(x=>x.ImageName,“strImage”);
}
}
以及以下持续规范测试:
PersistenceSpecification<Image>(session)()
.CheckProperty(r => r.Id, 1)
.CheckProperty(r => r.ImageName, "ss")
.CheckProperty(r => r.ObjId, (int)ObjectType.Country)
.CheckProperty(r => r.RelId, 102)
.VerifyTheMappings();
PersistenceSpecification(会话)()
.CheckProperty(r=>r.Id,1)
.CheckProperty(r=>r.ImageName,“ss”)
.CheckProperty(r=>r.ObjId,(int)ObjectType.Country)
.CheckProperty(r=>r.RelId,102)
.验证应用程序();
在某种程度上,图像的测试失败了
失败消息是
Assert.AreEqual失败。预期:。实际:System.Data.SQLite.SQLiteException:约束失败
外键约束失败
我已经查了两天了,还没找到原因。有什么帮助吗?好的,我知道了
这段代码的问题就在这里
HasMany(x => x.FlagImages)
.Table("tblImage")
.KeyColumn("intRelId")
.Where("intObjId=29")
.Not.Cascade.All();
NHibernate使用tblImage自动创建一个外键约束,该约束包含大量的intRelId
s,而这些intRelId不在表tblcontry
的intCountryId
列中。这就是测试失败的原因,即外键约束失败
解决此问题的方法是在数据库中创建视图
,然后将视图
映射到图像
模型中