我无法使用流畅的nhibernate 3更新记录,并使用generatedby.assigned生成器进行映射

时间:2014-06-26 00:39:15

标签: nhibernate fluent-nhibernate sql-update fluent-nhibernate-mapping

我的设计具有流畅的n hibernate,我使用nhibernate linq来查询数据库。该应用程序使用域驱动程序架构。数据库是MSSQL 2012.除了使用没有种子标识的ID的一个表的情况之外,我没有任何表插入,更新或删除的问题。然后我需要在地图中使用以下内容:

 public class SySchoolLogoMap : ClassMap<SySchoolLogo>
    {
        public SySchoolLogoMap()
        {
            ReadOnly();

            Table("SySchoolLogo");

            Id(x => x.ID).Column("ImgId").GeneratedBy.Assigned();
            Map(x => x.ContentType).Column("ContentType").Nullable();
            Map(x => x.ImagenBytes).Column("Image").Not.Nullable().Length(50000);
            Map(x => x.ImgLenth).Column("ImgLen").Nullable();
            Map(x => x.ImageFile).Column("imgFile").Nullable();
            Map(x => x.OfficialUse).Column("OfficialUse").Nullable();
            Map(x => x.ImageCode).Column("ImageCode").Nullable();
            Map(x => x.Description).Column("Description").Nullable();
        }
}

域名如下:

 public class SySchoolLogo : DomainEntityWithTypedID<int>
{
  ... abbreviate
}

基础DomainEntityWithTypedID 只有一个ID整数用作表主键。

更新操作正在使用nhibernate链接,我确信该服务已被调用并执行。

更新服务如下:

[HttpPost]
        public HttpResponseMessage UpdateLogo([FromBody]SchoolLogoOutputModel logodata)
        {
            try
            {
                var logo = repository.Get<SySchoolLogo>(logodata.ID);
                if (logo == null)
                {
                    throw new HttpBadRequestResponseException("The Image does not exists or was erased in server.");
                }
               logo.UpdateLogo(logodata.Description, logodata.ImageCode, logodata.OfficialUse);

                repository.SaveAndFlush(logo);
                 return new HttpResponseMessage(HttpStatusCode.OK);
            } //catch ignored to abbreviate.

我已经调试过程,我确信Save的操作已经执行,我也尝试使用Update,Merge和所有flush版本。操作返回OK,但数据库未更新。 我错过了什么,但我找不到什么,有什么帮助?

1 个答案:

答案 0 :(得分:1)

嗯,您正在使用5.1.3. class映射:

<class
    ...
    mutable="true|false"                          (4)
    ...
  

(4)mutable (可选,默认为true):指定类的实例是(不)可变的。

这是上面流利的映射:

public SySchoolLogoMap()
{
    ReadOnly(); // mutable="false"

这就是NHiberante正确执行 NOT 执行任何更新的原因...