Nhibernate 对 select 进行更新?

2024-03-08

我有以下课程:

public class Product
{
  public virtual Guid Id { get; set; }
  public virtual string Name { get; set; }
  public virtual Decimal PricePerMonth { get; set; }
  public virtual BillingInterval DefaultBillingInterval { get; set; }
  public virtual string AdditionalInfo { get; set; }
}

映射如下所示:

 <class name="Product" table="Products">
    <id name="Id" column="ProductId">
      <generator class="guid.comb"/>
    </id>
    <property name="Name" column="ProductName" not-null="true" type="String" />
    <property name="PricePerMonth" column="PricePerMonth" not-null="true" type="Decimal" />
    <property name="DefaultBillingInterval" type="int" not-null="true" />
    <property name="AdditionalInfo" type="string" not-null="false" />
</class>

I use a Repository<T>具有以下方法的类(Session是返回当前会话的属性):

public IEnumerable<T> FindAll(DetachedCriteria criteria)
{
  return criteria.GetExecutableCriteria(Session).List<T>();
}

现在,当我执行以下操作时(该会话与存储库中使用的会话相同):

IEnumerable<ProductDTO> productDTOs = null;
using(ITransaction tx = session.BeginTransaction(IsolationLevel.ReadCommitted))
{
    var products = repository.FindAll(new DetachedCriteria.For<Product>().Add(Restrictions.Like("Name", "Some Product%")));
    productDTOs = ToDTOs(products);
    tx.Commit();
}
// Do stuff with DTO's

提交语句在那里,因为我使用一个服务层,如果没有发生错误,它会自动提交每个事务。我只是在这里折叠了我的服务层以便于可视化。

My ToDTOs方法简单地转换为 DTO:

private IEnumerable<ProductDTO> ToDTO(IEnumerable<Product> products)
{
  return products.Select(x => new ProductDTO()
    {
      Id = x.Id,
      Name = x.Name,
      PricePerMonth = x.PricePerMonth,
      AdditionalInfo = x.AdditionalInfo
    }).ToList();
}

我的 nhibernate 日志显示以下输出:

2010-01-04 19:13:11,140 [4] DEBUG NHibernate.SQL - SELECT ... From Products ...
2010-01-04 19:13:11,237 [4] DEBUG NHibernate.SQL - UPDATE Products ...
2010-01-04 19:13:11,548 [4] DEBUG NHibernate.SQL - UPDATE Products ...
...

因此,通过选择产品,它会在会话提交时为返回的每个产品发出更新语句,即使产品中没有任何更改。

有任何想法吗?


仅当我有一个实体从属性返回的值与分配给它的值不同时,才会产生这种效果。然后被NH视为脏的。

Example:

class Foo
{
  private string name;

  public string Name 
  { 
    // does not return null when null had been set
    get { return name ?? "No Name"; }
    set { name = value; }
  }

}

这就是我编写映射文件的方式。

<class name="Product" table="Products">
    <id name="Id" column="ProductId">
      <generator class="guid.comb"/>
    </id>
    <property name="Name" column="ProductName" not-null="true" />
    <property name="PricePerMonth" not-null="true" />
    <property name="DefaultBillingInterval" not-null="true" />
    <property name="AdditionalInfo" />
</class>

您不需要指定类型。它们由 NHibernate 在运行时确定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nhibernate 对 select 进行更新? 的相关文章

  • 将公历日期转换为儒略日期,然后再转换回来(随着时间)

    我正在编写一个程序 必须将当前的公历日期和时间转换为儒略日期 然后再转换回公历门 最终我需要添加能够添加年 月 日 小时 分钟和秒的功能 但我需要先解决这部分问题 现在我已经从公历日期转换为儒略日期 所以从逻辑上讲 我觉得我应该能够以某种方
  • 最新 .Net MongoDb.Driver 的连接问题

    我创建了一个 MongoLab 沙箱数据库 我与 MongoChef 连接 效果很好 我通过 Nuget 安装了 MongoDB Driver 2 2 2 我编写了一些简单的 C 演示代码 但就是无法使其工作 连接字符串是直接从 Mongo
  • 局部函数声明有什么用处吗?

    大多数像我这样的 C 程序员都曾犯过以下错误 class C int main C c declares a function c taking no arguments returning a C not as intended by m
  • 为什么子函数不销毁GtkWindow?

    这是我的代码 void window first void enter window2 GtkWidget w gpointer data void quit GtkWidget w gpointer data void quit int
  • ASP.NET - 在 RenderContent 调用中将事件处理程序添加到 Repeater 内的 LinkBut​​ton

    我有一个加载自定义用户控件的 Sharepoint WebPart 用户控件包含一个 Repeater 而 Repeater 又包含多个 LinkBut ton 在 Web 部件的 RenderContent 调用中 我有一些用于添加事件处
  • ContentDialog 未与 UWP 中心对齐

    据我所知 ContentDialog的默认行为应该是使其在 PC 上居中并在移动设备上与顶部对齐 但就我而言 即使在 PC 上我也将其与顶部对齐 但我不明白发生了什么 我正在使用代码隐藏来创建它 这是我正在使用的代码片段 Creates t
  • 对作为函数参数传递的指针使用删除

    删除作为函数参数传递的指针是否可以 并且合法 如下所示 include
  • 如何减少 MinGW g++ 编译器生成的可执行文件的大小?

    我有一个简单的 Hello world C 程序 在 Win XP 下由 MinGW g 编译器编译为 500kB 可执行文件 有人说这是由于iostream的库和静态链接libstdc dll Using s链接器选项有点帮助 减少了 5
  • 调用异步方法在视图模型的构造函数中加载数据有警告

    我的视图包含一个 ListView 它显示来自互联网的一些数据 我创建一个异步方法来加载数据并在我的视图模型的构造函数中调用该方法 它有一个警告提示我现在使用await关键字 还有其他解决方案可以在构造函数中异步加载数据吗 有几种可以应用的
  • 当需要不同数量和类型的参数时如何创建操作委托列表

    我们有一组大约两打的类 它们继承自具有抽象 Validate 方法的基类 当然 每个类都有不同的验证需求 但它们之间的不同组合需要规则 因此 正如您可以想象的那样 这导致了大量代码重复 例如 A 类需要规则 1 3 6 和 9B 类需要规则
  • 从 DataRow 单元格解析 int [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 如何从 DataRow 单元格解析 int 值 Int32 Parse item QuestionId ToString 这段代码可以工作 但看
  • valgrind 在 Raspberry Pi 上返回未处理的指令

    我最近一直在尝试在运行 Debian GNU Linux7 0 喘息 的树莓派 型号 b 上使用 valgrind 来调试分段错误 每次我在编译的 C 程序上运行 valgrind 时 都会得到类似以下内容的信息 disInstr arm
  • 如何同步nosql db(ravendb)中的更改

    我已经开始在 RavenDB 的示例上学习 NoSQL 我从一个最简单的模型开始 假设我们有由用户创建的主题 public class Topic public string Id get protected set public stri
  • C 变量声明的效率 [重复]

    这个问题在这里已经有答案了 例如 在 C 中声明一个变量需要多长时间int x or unsigned long long var 我想知道它是否会让我的代码在类似的事情中更快 for conditions int var 0 code 这
  • “1个未解决的外部”C++

    我已经检查了所有文件之间的连接以及类和函数定义 但每次我尝试运行我的程序时 它都会阻止我并告诉我它有 1 个未解析的外部 该程序应该打开多个文件 一个 学生 文件和一个 成绩 文件 从中读取数据 然后使用 查询文件 来查找数据 找到查询中要
  • 使用多态对象数组进行 JSON 反序列化

    我在涉及多态对象数组的 JSON 反序列化方面遇到问题 我已经尝试过记录的序列化解决方案here https stackoverflow com questions 5186973 json serialization of array w
  • 从对列表创建邻接列表类型结构

    在 C 中 我有 class Pair int val1 int val2 我有一个来自以下来源的配对列表 List
  • 实体框架:ObjectSet 及其(泛型)方差

    我使用 EntityFramework POCO 事情是这样的 public interface IBaseType int Id get set public class BaseType IBaseType public virtual
  • 如何在 C 中创建最低有效位设置为 1 的掩码

    这个功能如何运作 最低有效 n 位设置为 1 的掩码 Example n 6 gt 0x2F n 17 gt 0x1FFFF 我根本不明白这些 尤其是 n 6 gt 0x2F 另外 什么是面膜 通常的方法是采取1 并将其左移n位 这会给你类
  • 如何使用 C# 为 azure devops 变量赋值

    我有 selenium C 测试脚本 可以从浏览器获取令牌 我有两个 azure devops 任务 一个用于执行 selenium 测试 另一个用于执行 API 测试 我想将 selenium 测试获取的令牌传递给 API 测试执行任务

随机推荐

  • 在 C 中使用嵌套循环打印星号('*')菱形?

    我希望当用户输入 5 作为钻石时能够打印这样的钻石 但也适用于任何奇数且大于 0 的值 我有一个代码 可以为用户输入 5 创建一个菱形 但不适用于所有奇数输入 half size 2 1 for a 1 a lt half a top to
  • 如何在 JavaScript 中执行 JSTL 的 c:url 的等效操作?

    我有一些 JavaScript 对相对 url 进行 Ajax 调用 使用 jQuery var servletUrl someservlet ajax type POST url servletUrl success function r
  • 如何使用 Twitter4j 检索超过 100 个结果

    我正在使用 Twitter4j 库来检索推文 但我得到的信息还不足以满足我的目的 目前 我从一页最多获取 100 个 如何在处理中的以下代码中实现 maxId 和sinceId 以便从 Twitter 搜索 API 检索超过 100 个结果
  • 使全局站点包中的一些模块在 virtualenv 中可用

    我想使用 virtualenv 的默认值 无站点包 但有些模块很难安装在 virtualenv 中 例如 gtk 我所说的 困难 是指您需要安装大量的 c 头文件并且需要编译大量的内容 我知道我可以通过不使用 pip 安装这些包来解决这个问
  • Windows Phone 7 的水印文本框?

    我正在寻找某种适用于 Windows Phone 7 的 WatermarkedTextBox 但我需要一个自定义控件 而不是如何实现水印行为或如何处理 GotFocus LostFocus 事件 官方已添加此内容Windows Phone
  • 如何在 Google App Engine 中运行自定义 python 脚本

    对于这么长的详细问题表示歉意 开始 该文件的名称为 send daily report py 并使用一些库 这些库在requirements txt 文件中详细介绍 My app yaml看起来如下 runtime python27 thr
  • 如何在 moment.js 中设置解析区域?

    不幸的是 我没有在文档中找到答案 所以 例如 我输入日期 09 01 2017 我不知道 它是 DD MM YYYY 或 MM DD YYYY 但我知道用户区域设置 我可以得到像下面这样的东西吗 let date 09 01 2017 lo
  • 输入按键时获取 UITextField 的值?

    假设我有以下代码 IBOutlet UITextField nameTextField IBOutlet UILabel greetingLabel 我想要greetingLabel用户按下任意键后立即读取 Hello nameTextFi
  • Next.js:匹配根“/”和动态路由“/param”的页面

    我有一个使用 Next js 的单页面网站 我在路线上有主页 显示产品列表 该页面的代码位于pages index js 每个产品都有一个id所以我可以使用跳转到它 product id 为了使其更加 url 友好 我使用以下命令复制此行为
  • 默认情况下,按字母顺序对 Woocommerce 产品目录进行排序

    在带有 Avada 主题的 Woocommerce 中 我尝试使用以下代码按 DESC 顺序按字母顺序对产品进行排序 add filter woocommerce get catalog ordering args custom wooco
  • 在 ionic 框架中显示连接错误消息

    我正在开发一个离子移动应用程序 但很难显示连接错误消息 当设备未连接到互联网或连接超时或其他情况时 我想显示一个弹出窗口来显示错误消息 这是我第一次遇到这样的事情 首先将插件添加到您的项目中 然后在你的 app js 中包含以下代码 js
  • 如何访问可重用组件内的 ngModel 元素

    我的可重用组件中有一个 ngModel 组件 该字段不是表单的一部分 我想访问它来进行一些更改 我尝试了下面的代码 但它在 OnInit 中未定义 你能告诉我如何访问它吗 下面的代码返回未定义 ViewChild nameAccessor
  • Android 证书已过期

    目前 我在签署我的应用程序时收到一条错误消息 指出证书已过期 不是调试证书 我知道这令人惊讶 因为 Android 证书应该可用很多年 我无法创建新证书 因为在 PlayStore 上更新我的 apk 时出现错误 apk 的证书必须与前一个
  • Excel SpillParent 和 SpillingToRange 难度

    我正在尝试使用 SpillParent and SpillingToRange在某些 UDF 中的 Excel 中的 Range 对象上 当该范围不在调用 UDF 的同一工作表上时 会出现意外行为 我知道如果我使用 溢出运算符 我不需要这样
  • `npm install` 在 node-gyp 重建上失败,并显示“gyp:未检测到 Xcode 或 CLT 版本!”

    每次我尝试npm install 我收到以下错误 我如何解决它 gyp No Xcode or CLT version detected I am on node v v8 8 0 npm v v6 11 3 我尝试在 VSCode 终端和
  • sbt - 对象 apache 不是包组织的成员

    我想使用 sbt 部署并提交 Spark 程序 但它抛出错误 Code package in goai spark import org apache spark SparkContext SparkConf object SparkMeA
  • Laravel 中添加路由名称前缀而不添加 URI 前缀

    我有两个命名空间 Front and Admin For Admin 名称空间 可以将所有路径添加为前缀admin conrtoller action 但对于 Front 我想要有前缀的路由名称而不带前缀 URI Route group a
  • Facebook API - 权限错误

    有人知道 Facebook API 错误的原因是什么吗 当用户通过 feed 调用发帖时 有时会出现这种情况 error message Permissions error type FacebookApiException code 20
  • 如何限制激励视频广告长度 (admob)?

    我的应用程序使用激励视频广告 但在我看来 有时广告太长 如何设置广告时长限制 这不是 AdMob 提供的功能 不过 感觉太长的广告通常会收到较少的点击次数 因此随着系统的调整 显示的频率会越来越低
  • Nhibernate 对 select 进行更新?

    我有以下课程 public class Product public virtual Guid Id get set public virtual string Name get set public virtual Decimal Pri