2009-09-17 3 views
1

필드에 액세스하려고 시도하는 대신 속성에 액세스하려고 시도하는 중 오류가 발생하여 예상대로 작동하지 않는다는 것을 다른 사람이 확인할 수 있습니까?FluentNHibernate - ReadOnlyPropertyThroughCamelCaseField (Prefix.Underscore)

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: Property set method not found. at System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture) at System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, Object[] index) at FluentNHibernate.Testing.PersistenceSpecification 1.ListValue 1.SetValue(Ob ject target) in E:\Users\epitka\Documents\DEVELOPMENT\fluent- nhibernate\src\FluentNHibernate\Testing\PersistenceSpecification.cs: line 174

스위치 전략은 ReadOnlyPropertyTrhoughPascalCaseField를 사용하는 경우가 제대로이 오류가 발생하는 경우 :

NHibernate.PropertyNotFoundException: Could not find field '_MetaPackages' in class 'dnnSphere.Meta.Model.MetaProject'

은 그래서 ReadOnlyPropertyThroughCamelCaseField (Prefix.Underscore)는 필드보다는 속성에 잘못 매핑되는 것입니다.

답변

2

PersistenceSpecification에서 "문제"(문제가 될 수있는 경우)입니다. PropertyInfo는 매핑 방법에 관계없이 속성에 setter가 필요합니다. 이상적은 아니지만 PersistenceSpecification으로 테스트 할 수있는 전용 설정기를 만들 수 있습니다.

1

동일한 문제가 있었지만 속성 설정 도구를 사용하고 싶지 않았습니다. 이 CheckList()의 일부 오버로드 만의 문제처럼

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

것 같다 : 이미 항목을 추가 할 수있는 공공 방법을 가지고 있기 때문에, 나는이의 상당했다.

관련 문제