Проблема обновления Nhibernate - индекс параметра выходит за пределы диапазона - PullRequest
3 голосов
/ 28 августа 2011

У меня проблема с обновлением данных в базе данных.У меня есть простое отношение «продукт один к одному»:

    public class GroupInfoMapping : ClassMap<GroupInfo>
{
    public GroupInfoMapping()
    {
        Table("`group`");
        Schema("tempdb");
        Id(x => x.Id)
            .GeneratedBy.Native();
        OptimisticLock.Version();
        Map(x => x.GroupName);
        Map(x => x.ParentId);
                       HasMany(x => x.Products)
                           .KeyColumn("GroupId")
                           .Inverse()
                           .Fetch.Select()
                           .AsSet();
                       //HasMany(x => x.Children)
                       //    .KeyColumn("Id")
                       //    .Inverse()
                       //    .Fetch.Select()
                       //    .Cascade.None()
                       //    .AsSet();
                       //References(x => x.Parent)
                       //    .Class(typeof(GroupInfo))
                       //    .Column("ParentId")
                       //    .Fetch.Select();

    }
}

     public class ProductInfoMapping : ClassMap<ProductInfo>
{
    public ProductInfoMapping()
    {
        Table("`product`");
        Schema("tempdb");
        Id(x => x.Id)
            .GeneratedBy.Native();
        OptimisticLock.Version();
                       Map(x => x.GroupId);
        Map(x => x.ProductName);
                       References(x => x.Group)
                         .Class(typeof(GroupInfo))
                         .Column("GroupId")
                         .Fetch.Select();
    }
}

Нет разницы, если я изменяю только данные продукта, это не позволит мне обновляться, за исключением:range.

Если я добавлю Not.Update () к сопоставлению продукта для ссылки на группу, я смогу обновить данные продукта (но на группу по-прежнему не ссылаются).

Я использую базу данных MySql и использую один сеанс для каждого докладчика.Почему я не могу обновить и сущность, и ее ссылку?Я закомментировал часть для самостоятельной ссылки на группу, поскольку это также создает проблему при обновлении только группы.

Спасибо, Горан

1 Ответ

3 голосов
/ 29 августа 2011

В вашем классе ProductInfoMapping вы отображаете один и тот же столбец дважды:

Map(x => x.GroupId);

и

References(x => x.Group)
    .Class(typeof(GroupInfo))
    .Column("GroupId")
    .Fetch.Select();

Карта идентификатора группы не требуется, так какВы можете получить доступ к идентификатору свойства Group без него:

var groupId = someProdInfoObj.Group.Id;

Обновление:

Если вы все еще хотите, чтобы был GroupId свойство, к которому вы можете обращаться по идентификатору группы вместо того, чтобы обращаться к нему напрямую в объекте группы, вы можете просто изменить свойство следующим образом (например, для идентификатора с типом Guid):

public virtual Guid? GroupId
{
    get { return Group != null ? Group.Id : null; }
    set { }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...