任何人都可以确认这不会按预期工作,因为我收到的错误是它试图访问属性而不是尝试访问字段。
private IList<MetaPackage> _metaPackages;
public virtual IEnumerable<MetaPackage> MetaPackages
{
get
{
return _metaPackages;
}
}
流利的映射
HasMany<MetaPackage>(x
=>x.MetaPackages).Table("dnnSphere_Package").KeyColumn("Id")
.Inverse().LazyLoad().Cascade.AllDeleteOrphan()
.Access.ReadOnlyPropertyThroughCamelCaseField(Prefix.Underscore)
单元测试
new PersistenceSpecification<MetaProject>(Session)
.CheckProperty(x => x.Name, "Test")
.CheckProperty(x => x.Description, "Description")
.CheckList(x=>x.MetaPackages, new List<MetaPackage> { new
MetaPackage ("name")})
.VerifyTheMappings();
错误:
它抛出一个错误,它找不到Property setter,即使它应该通过一个字段,因为它是readonly属性。
System.ArgumentException:属性集 找不到方法。在 System.Reflection.RuntimePropertyInfo.SetValue(对象 obj,Object value,BindingFlags invokeAttr,Binder binder,Object [] 索引,文化信息文化) System.Reflection.RuntimePropertyInfo.SetValue(对象 obj,Object value,Object [] index)at FluentNHibernate.Testing.PersistenceSpecification
1.ListValue
1.SetValue(OB ject target)in E:\用户\ epitka \文档\开发\ fluent- NHibernate的的\ src \ FluentNHibernate \测试\ PersistenceSpecification.cs: 第174行
如果切换策略使用ReadOnlyPropertyTrhoughPascalCaseField它会正确抛出此错误:
NHibernate.PropertyNotFoundException: 找不到字段'_MetaPackages' 在班上 'dnnSphere.Meta.Model.MetaProject'
因此,似乎ReadOnlyPropertyThroughCamelCaseField(Prefix.Underscore)将其错误地映射到属性而不是映射到字段。
答案 0 :(得分:2)
好的,PersistenceSpecification中的“问题”是(如果它可以被称为问题)。它适用于PropertyInfo,无论它如何映射并且需要属性上的setter。不理想,但可以创建私有的setter,以便能够使用PersistenceSpecification进行测试。
答案 1 :(得分:1)
我有同样的问题,但我不想使用属性设置器。由于我已经有一个公共方法来添加项目,我做了相同的事情:
new PersistenceSpecification<MetaProject>(Session)
.CheckProperty(x => x.Name, "Test")
.CheckProperty(x => x.Description, "Description")
.CheckList(
x => x.MetaPackages,
new List<MetaPackage> { new MetaPackage ("name") },
(MetaProject project, MetaPackage package) =>
{
project.AddPackage(package);
}
.VerifyTheMappings();
似乎这只是CheckList()
的一些重载问题。