FluentNHibernate-ReadOnlyPropertyThroughCamelCaseField(前缀.下划线)

FluentNHibernate-ReadOnlyPropertyThroughCamelCaseField(前缀.下划线),nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,有人能确认这并没有按预期工作,因为我得到一个错误,它试图访问属性,而不是试图访问字段 private IList<MetaPackage> _metaPackages; public virtual IEnumerable<MetaPackage> MetaPackages { get { return _metaPackages; } } private-IList\u元包; 公共虚拟IEnumerable元包 { 得到 { 返回元包; } } 流畅映

有人能确认这并没有按预期工作,因为我得到一个错误,它试图访问属性,而不是试图访问字段

private IList<MetaPackage> _metaPackages;
public virtual IEnumerable<MetaPackage> MetaPackages
{
 get
 {
    return _metaPackages;
 }
}
private-IList\u元包;
公共虚拟IEnumerable元包
{
得到
{
返回元包;
}
}
流畅映射

    HasMany<MetaPackage>(x 
=>x.MetaPackages).Table("dnnSphere_Package").KeyColumn("Id")
 .Inverse().LazyLoad().Cascade.AllDeleteOrphan()               
.Access.ReadOnlyPropertyThroughCamelCaseField(Prefix.Underscore)
HasMany(x
=>x.MetaPackages).Table(“dnnSphere\u packages”).KeyColumn(“Id”)
.Inverse().LazyLoad().Cascade.AllDeleteOrphan()
.Access.ReadOnlyPropertyThroughCamelCaseField(前缀为.下划线)
单元测试

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();
新的PersistenceSpecification(会话)
.CheckProperty(x=>x.Name,“测试”)
.CheckProperty(x=>x.Description,“Description”)
.CheckList(x=>x.MetaPackages,新列表{new
元包(“名称”)})
.验证应用程序();
错误:

它抛出一个找不到属性setter的错误,即使它应该通过一个字段,因为它是只读属性

System.ArgumentException:属性集 找不到方法。在 System.Reflection.RuntimePropertyInfo.SetValue(对象 对象,对象值,绑定标志 invokeAttr,活页夹,对象[] 索引,文化信息(文化)位于 System.Reflection.RuntimePropertyInfo.SetValue(对象 对象,对象值,对象[]索引)位于 FluentNHibernate.Testing.PersistenceSpecification
1.ListValue
1.SetValue(Ob (目标)在 E:\Users\epitka\Documents\DEVELOPMENT\fluent- nhibernate\src\FluentNHibernate\Testing\PersistenceSpecification.cs: 第174行

如果开关策略使用ReadOnlyPropertyThoughPascalCaseField,则会正确抛出此错误:

NHibernate.PropertyNotFoundException: 找不到字段“\u MetaPackages” 课堂上 'dnnSphere.Meta.Model.MetaProject'


因此,ReadOnlyPropertyThroughCamelCaseField(前缀.下划线)似乎错误地将其映射到属性而不是字段。

Ok,“问题”在PersistenceSpecification中是(如果可以称为问题的话)。它与PropertyInfo一起工作,不管它是如何映射的,并且需要在属性上设置setter。不理想,但可以创建私有setter,以便能够使用PersistenceSpecification进行测试。

我也遇到了同样的问题,但我不想使用属性setter。因为我已经有了一个添加项目的公共方法,所以我做了与此等效的操作:

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();
新的PersistenceSpecification(会话)
.CheckProperty(x=>x.Name,“测试”)
.CheckProperty(x=>x.Description,“Description”)
.检查表(
x=>x.MetaPackages,
新列表{new MetaPackage(“name”)},
(元项目、元包)=>
{
项目.添加包(包);
}
.验证应用程序();
似乎这只是
CheckList()
的一些重载问题