流利的Nhibernate不会在短时间内拯救布尔人

流利的Nhibernate不会在短时间内拯救布尔人,nhibernate,fluent-nhibernate,fluent-nhibernate-mapping,Nhibernate,Fluent Nhibernate,Fluent Nhibernate Mapping,我使用Nuget升级到Nhibernate 3.2.0.4000和fluent 1.3.0.717。以前有效的映射现在在尝试保存时给我带来了问题。数据加载良好,但当我尝试更改任何布尔值时,它们被忽略。我可以毫无问题地保存文本字段。事实上,我可以在一次保存中更改文本字段和布尔值,它实际上只将文本字段更改保存到数据库中 首先,我有一个选项对象 public class Options { public virtual long OptionsId { get; set; } pri

我使用Nuget升级到Nhibernate 3.2.0.4000和fluent 1.3.0.717。以前有效的映射现在在尝试保存时给我带来了问题。数据加载良好,但当我尝试更改任何布尔值时,它们被忽略。我可以毫无问题地保存文本字段。事实上,我可以在一次保存中更改文本字段和布尔值,它实际上只将文本字段更改保存到数据库中

首先,我有一个选项对象

public class Options
{
    public virtual long OptionsId { get; set; }

    private IList<MobileOptions> MobileGatewayList { get; set; }


    public virtual MobileOptions MobileGateway
    {
        get
        {
            if (MobileGatewayList == null)
                return null;

            return MobileGatewayList.FirstOrDefault();
        }
    }

}
SharedGatewayOptions
是我所有选项子集的一类共享选项(我有3个,但我只展示了mobile以保持此示例的简洁性)。具体来说,我注意到错误出现在布尔标志中,以启用应用程序的移动部分

public class SharedGatewayOptions
{
    public virtual bool GatewayActivated { get; set; }
}
my main options类map options中移动选项的映射如下所示

HasMany<MobileOptions>(Reveal.Member<GatewayOptions>("MobileGatewayList"))
            .KeyColumn("OptionsId")
            .Cascade.All();
public void ToggleGateways(ToggleGatewaysRequest request)
{
    var options = GetOptions(new GatewayOptionsRequest() { SiteId = request.SiteId });

    options.RemoteGateway.SharedGatewayOptions.GatewayActivated = request.RemoteGatewayActivated;

    optionsRepository.Save(options);
}

这段代码过去是可以工作的,但升级后就不再工作了。我跟踪了它,对象在内存中被更改,但在下一个请求中,对象被“还原”。我已经仔细检查了代码,看看在下一个请求中,我是否以某种方式导致位反转,但事实并非如此。数据库从来都不难处理。这就好像最新的fluent不再知道如何在保存时映射布尔->位。

AFAIK
.Generated.Insert()
表示该属性是在插入时生成的,然后从未更改过,但既然您想更改它,就应该将其忽略

不是对您问题的直接回答,但您是否考虑加入另一个表以获得所需的值

public class Options
{
    public virtual long OptionsId { get; set; }

    public virtual MobileOptions MobileGateway { get; set; }
}

// in OptionsMap
Join("MobileOptions", join =>
{
    join.Optional();
    join.KeyColumn("OptionsId");
    join.Component(x => x.SharedGatewayOptions, y =>
    {
        y.Map(x => x.GatewayActivated, "ActivateGateway");
    });
});
或者另一种课堂设计

public class GatewayOptions
{
    public virtual bool GatewayActivated { get; set; }
}

public class MobileOptions : GatewayOptions
{
    public virtual bool Something { get; set; }
}

// in OptionsMap
RefernecesAny(x => x.Options)...;

AFAIK
.Generated.Insert()
表示该属性是在插入时生成的,然后从未更改过,但既然您想更改它,就应该将其忽略

不是对您问题的直接回答,但您是否考虑加入另一个表以获得所需的值

public class Options
{
    public virtual long OptionsId { get; set; }

    public virtual MobileOptions MobileGateway { get; set; }
}

// in OptionsMap
Join("MobileOptions", join =>
{
    join.Optional();
    join.KeyColumn("OptionsId");
    join.Component(x => x.SharedGatewayOptions, y =>
    {
        y.Map(x => x.GatewayActivated, "ActivateGateway");
    });
});
或者另一种课堂设计

public class GatewayOptions
{
    public virtual bool GatewayActivated { get; set; }
}

public class MobileOptions : GatewayOptions
{
    public virtual bool Something { get; set; }
}

// in OptionsMap
RefernecesAny(x => x.Options)...;

在早期版本的fluent/nhibernate中,
.Generated.Insert()工作,字段将更新。我最终删除了映射的这一部分,它就像一个champ工作,字段将更新。我最终移除了地图的这一部分,它就像一个冠军。