Проблема Reveal.Member при отображении сопоставления один к одному с помощью Fluent и Nhibernate. - PullRequest
2 голосов
/ 21 сентября 2011

Я следил за превосходной статьей Бруно за однозначное сопоставление в беглом Nhibernate. Однако я столкнулся с небольшой проблемой при отображении частных объектов с ошибкой, которая не ясна. Вот мои сущности, отображение и ошибка:

Сущности

public class Student
{
    public virtual String Studentid { get; set; }       
    public virtual Address Address { get; set; }             
}
 public class Address
{
    private String StudentId { get; set; }
    private Student Student { get; set; }

    public Address(Student student)
    { Student = student; }
}

Отображение:

public StudentMap()
    {
        Id(x => x.Studentid).GeneratedBy.Assigned();          
        HasOne(x => x.Address).Cascade.All();
    }

public AddressMap()
    { 
        Id(x=> Reveal.Member<Address>("StudentId"))
                    .GeneratedBy.Foreign("Student");

        HasOne( x=> Reveal.Member<Address,Student>("Student"))                             
                .Constrained()
                .ForeignKey();

    }

Теперь, когда я пытаюсь запустить его, он выдает ошибку как:

Не удалось определить тип для: System.Linq.Expressions.Expression 1[[System.Func 2 [[CastleTest.Domain.Address, CastleTest, Версия = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null], [System.Object, mscorlib, версия = 2.0.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089]], System.Core, версия = 3.5.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089]], System.Core, версия = 3.5.0.0, культура = нейтральный, PublicKeyToken = b77a5c561934e089, для столбцов: NHibernate.Mapping.Column (Member)

Почему происходит эта ошибка?

1 Ответ

2 голосов
/ 21 сентября 2011

изменение

HasOne(x => Reveal.Member<Address,Student>("Student"))

до

HasOne(Reveal.Member<Address,Student>("Student"))

потому что FNH считает x => Reveal.Member x => x.Member

вызов Reveal.Member<Address,Student>("Student") возвращает что-то вроде adress => adress.Student

...