我的设计具有流畅的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,但数据库未更新。 我错过了什么,但我找不到什么,有什么帮助?
答案 0 :(得分:1)
嗯,您正在使用5.1.3. class映射:
<class
...
mutable="true|false" (4)
...
(4)mutable (可选,默认为true):指定类的实例是(不)可变的。
这是上面流利的映射:
public SySchoolLogoMap()
{
ReadOnly(); // mutable="false"
这就是NHiberante正确执行 NOT 执行任何更新的原因...