【问题标题】:FluentNHibernate - ReadOnlyPropertyThroughCamelCaseField(Prefix.Underscore)FluentNHibernate - ReadOnlyPropertyThroughCamelCaseField(Prefix.Underscore)
【发布时间】:2009-09-17 15:59:38
【问题描述】:

任何人都可以确认这没有按预期工作,因为我收到一个错误,它正在尝试访问属性而不是尝试访问字段。

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();

错误:

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

System.ArgumentException:属性集 找不到方法。在 System.Reflection.RuntimePropertyInfo.SetValue(对象 obj,对象值,BindingFlags invokeAttr, Binder 绑定器, Object[] 索引,CultureInfo 文化)在 System.Reflection.RuntimePropertyInfo.SetValue(对象 obj,对象值,对象 [] 索引)在 FluentNHibernate.Testing.PersistenceSpecification1.ListValue1.SetValue(Ob 射出目标)在 E:\Users\epitka\Documents\DEVELOPMENT\fluent- nhibernate\src\FluentNHibernate\Testing\PersistenceSpecification.cs: 第 174 行

如果切换策略使用 ReadOnlyPropertyTrhoughPascalCaseField 则正确抛出此错误:

NHibernate.PropertyNotFoundException: 找不到字段“_MetaPackages” 在班上 'dnnSphere.Meta.Model.MetaProject'

因此,ReadOnlyPropertyThroughCamelCaseField(Prefix.Underscore) 似乎错误地将其映射到属性而不是字段。

【问题讨论】:

    标签: nhibernate fluent-nhibernate


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,但我不想使用属性设置器。由于我已经有一个添加项目的公共方法,所以我做了等效的操作:

      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() 的一些重载的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多