【发布时间】:2010-10-21 18:04:37
【问题描述】:
当谈到流畅的 nhibernate 时,我相当 n00bish,但我的一个存储库中有一个意外错误。
我有一个数据类型 CostCode
public class CostCode
{
public virtual int Id { get; set; }
public virtual String CostCodeCode { get; set; }
public virtual Company Company { get; set; }
public virtual DateTime CreatedDate { get; set; }
public virtual String CreatedBy { get; set; }
public virtual DateTime ModifiedDate { get; set; }
public virtual String ModifiedBy { get; set; }
}
这是映射
public sealed class CostCodeMap : ClassMap<CostCode>
{
/**
* @breif Mapping Constructor
*/
public CostCodeMap()
{
Id(Reveal.Member<CostCode>("Id"));
Map(x => x.CostCodeCode).Not.Nullable();
References(x => x.Company, "CompanyId").Cascade.All();
Map(x => x.CreatedDate).Not.Nullable();
Map(x => x.CreatedBy).Not.Nullable();
Map(x => x.ModifiedDate).Not.Nullable();
Map(x => x.ModifiedBy).Not.Nullable();
}
}
当我尝试更新此内容时,我收到一个错误“Domain.DataTypes.Company 实例的标识符已从 1 更改为 8”
现在我认为这是我设置映射的方式,以及我的存储库如何处理更新/添加。
我有一个控制公司 id 的下拉列表,当我添加/更新时,我将属性 company 设置为数据库中已更新到的 id 的任何内容。
var companyRepository= new CompanyRepository(_session);
temp.Company = companyRepository.GetCompanyById(temp.Company.Id);
_session.Update(c);
任何人都可以给我一个提示/解决方案来帮助我吗?在这里查看相关问题,问题可能是任何问题。
【问题讨论】:
-
这里有一些缺失和混乱的信息。在最后一个代码部分,你不想做 _session.Update(temp); ?如果不是,c是什么?您是否从传递给公司 repo 的同一会话中获得 temp/c?另外,您发现当您正确调用 repo 行时,您基本上是在将其设置回自身?