Проблемы с отношениями Shar Architecture HasOne - PullRequest
3 голосов
/ 08 декабря 2011

Я строю прямой порт поставщика членства ASP.NET от SQL до Sharp Arch 1.9.6 (используя Fluent NHibernate). Проблема возникает при попытке создать взаимно-однозначное отношение между aspnet_Users и таблицей aspnet_Membership. Вот что у меня есть:

public class User : EntityWithTypeId<Guid>
{
    public virtual Membership Membership { get; set; }
}

public class Membership : EntityWithTypeId<Guid>
{
    public virtual User User { get; set; }
}

public class UserMap : IAutoMappingOverride<User>
{
    public void Override(AutoMapping<User> mapping)
    {
        mapping.Table("aspnet_Users");
        mapping.HasOne(x => x.Membership)
            .PropertyRef(r => r.User)
            .Cascade.All();
    }
}

public class MembershipMap : IAutoMappingOverride<Membership>
{
    public void Override(AutoMapping<Membership> mapping)
    {
        mapping.Table("aspnet_Membership");

        mapping.Id(x => x.Id)
            .Column("UserId")
            .GeneratedBy.Foreign("User");
        mapping.HasOne(x => x.User)
            .ForeignKey("Membership_User_FK_Manual")
            .Constrained();
    }
}

Все остальные свойства настроены, но для того, чтобы пост был как можно более коротким, я перечислил только необходимую информацию.

Модульный тест от Sharp Arch, который генерирует схему БД, делает это правильно, показывая взаимно-однозначное соответствие между таблицами.

Проблема в том, что когда я иду, чтобы получить пользователя из базы данных, используя репозиторий, который предоставляет Sharp Arch. Я получаю ошибку:

NHibernate.PropertyAccessException : Invalid Cast (check your mapping for property type mismatches); setter of TrackerI9.Core.Providers.Entities.Membership
  ----> System.InvalidCastException : Specified cast is not valid.

Я использую SQLite в качестве базы данных для тестирования, и из операторов INSERT, которые выводят данные на консоль тестирования, я убедился, что данные вставляются в базу данных правильно и используют соответствующие идентификаторы. При необходимости я могу включить их и трассировку стека.

Я работаю над этим уже неделю и не нашла никакого решения. Я всегда мог объединить две таблицы в одну и просто двигаться дальше, но, как я уже сказал выше, я бы предпочел использовать порт DIRECT.

Дайте мне знать, что вы думаете.

...