gpt4 book ai didi

datetime - 带有日期的流畅 NHibernate 复合键

转载 作者:行者123 更新时间:2023-12-02 17:09:05 25 4
gpt4 key购买 nike

我是 NHibernate 新手,遇到了一个简单但顽固的错误。

我的数据库 (MSSQL2008) 中有一个表,其中复合键由 2 个日期列组成。

这些代表一个时间段 StartDate 和 EndDate,对于我的解决方案而言,该时间段是唯一的。

表定义如下:

创建表 [dbo].[CompositeKeyTab]( [KeyCol1] [日期] NOT NULL, [KeyCol2] [日期] NOT NULL, [值] [十进制](18, 0) NULL, 约束 [PK_CompositeKeyTab] 主键聚集( [KeyCol1] ASC, [KeyCol2] ASC)WITH (PAD_INDEX = OFF、STATISTICS_NORECOMPUTE = OFF、IGNORE_DUP_KEY = OFF、ALLOW_ROW_LOCKS = ON、ALLOW_PAGE_LOCKS = ON) ON [主要])关于[主要]

在我的域模型中,我有一个相应的实体:

public class CompositeKeyEnt
{
public virtual DateTime KeyCol1 { get; set; }
public virtual DateTime KeyCol2 { get; set; }
public virtual decimal Val { get; set; }

public override bool Equals(object obj)
{
var compareTo = obj as FinancialDay;
if (compareTo == null)
return false;
return this.GetHashCode() == compareTo.GetHashCode();
}
public override int GetHashCode()
{
return this.KeyCol1.GetHashCode() ^ this.KeyCol2.GetHashCode();
}
}

在我的映射程序集中有一个 map :

public class CompositeKeyEntMap: ClassMap<CompositeKeyEnt>
{
public CompositeKeyEntMap()
{
WithTable("CompositeKeyTab");
UseCompositeId().WithKeyProperty(e => e.KeyCol1, "KeyCol1").WithKeyProperty(e => e.KeyCol2, "KeyCol2");
Map(e => e.Val, "Value");
}
}

一切都编译正常。但是当我尝试将类的实例持久保存到数据库时(就像这样)

        CompositeKeyEnt cke = new CompositeKeyEnt() { KeyCol1 = DateTime.Now.AddDays(1), KeyCol2=DateTime.Now.AddDays(1), Val = 2.2M };
CompositeKeyEnt cke1 = new CompositeKeyEnt() { KeyCol1 = DateTime.Now, KeyCol2 = DateTime.Now, Val = 1.1M };
Repository<CompositeKeyEnt> crep = new Repository<CompositeKeyEnt>();
crep.SaveOrUpdate(cke);
crep.SaveOrUpdate(cke1);

我得到:

“意外行数:0;预期行数:1”

当在 session 上调用 Flush() 时。

    public virtual T SaveOrUpdate(T entity)
{
using (var context = Session)
{
context.SaveOrUpdate(entity);
context.Flush(); //Exception raised here!!!
}
return entity;
}

我做错了什么?

最佳答案

我认为问题在于 NHibernate 不知道复合键的未保存值是什么,因此当您调用 SaveOrUpdate() 时它会尝试发出更新而不是插入。我认为您不可能拥有此类的有效未保存值,因此我建议您修改存储库以分别实现 Save() 和 Update() 并调用适当的方法。

关于datetime - 带有日期的流畅 NHibernate 复合键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/943694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com