首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FluentNHibernate - ReadOnlyPropertyThroughCamelCaseField(Prefix.Underscore)

FluentNHibernate - ReadOnlyPropertyThroughCamelCaseField(Prefix.Underscore)
EN

Stack Overflow用户
提问于 2009-09-17 15:59:38
回答 2查看 1.1K关注 0票数 1

有人能确认这不像预期的那样工作,因为我收到一个错误,它试图访问属性,而不是试图访问字段。

代码语言:javascript
复制
private IList<MetaPackage> _metaPackages;
public virtual IEnumerable<MetaPackage> MetaPackages
{
 get
 {
    return _metaPackages;
 }
}

Fluent映射

代码语言:javascript
复制
    HasMany<MetaPackage>(x 
=>x.MetaPackages).Table("dnnSphere_Package").KeyColumn("Id")
 .Inverse().LazyLoad().Cascade.AllDeleteOrphan()               
.Access.ReadOnlyPropertyThroughCamelCaseField(Prefix.Underscore)

单元测试

代码语言:javascript
复制
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(Object obj,Object值,BindingFlags invokeAttr,binder粘合剂,Object[]索引,CultureInfo文化)在System.Reflection.RuntimePropertyInfo.SetValue(Object obj,Object值,Object[]索引)在FluentNHibernate.Testing.PersistenceSpecification1.ListValue1.SetValue(Ob对象目标)( E:\Users\epitka\Documents\DEVELOPMENT\fluent- nhibernate\src\FluentNHibernate\Testing\PersistenceSpecification.cs:第174行)

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

NHibernate.PropertyNotFoundException:在“dnnSphere.Meta.Model.MetaProject”类中找不到“_MetaPackages”字段

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-18 12:18:06

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

票数 2
EN

Stack Overflow用户

发布于 2014-06-03 23:47:22

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

代码语言:javascript
复制
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()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1439756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档