2010-10-21 65 views
0

当谈到流利的nhibernate时,我相当n00bish,但我的一个库中有一个意外的错误。流利的NHibernate添加和更新问题:参考文献

我有一个数据类型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的下拉列表,当我添加/更新时,我将属性公司设置为数据库中的任何数据库,以便更新为id。

var companyRepository= new CompanyRepository(_session); 
temp.Company = companyRepository.GetCompanyById(temp.Company.Id); 

_session.Update(c);     

任何人都可以给我一个提示/解决方案来帮助我的方式吗?在这里查看相关问题,问题可能是任何事情。

+1

你在这里有一些缺乏和令人困惑的信息。在最后的代码部分,你不想做_session.Update(temp); ?如果不是,什么是c?您是否从同一会话中获得了temp/c,然后传递给公司回购?另外,当您调用回购行时,您看到基本上已将其设置回自己了? – CrazyDart 2010-10-21 18:17:22

回答

2

好吧,我会随便扔了这一点...我敢打赌,正在发生的事情是要设置温度。 Company.Id通过更改Id,然后使用repo使用更改的ID获取该公司。 NHibernate会追踪你改变其他公司的Id。使用临时变量来存储新的公司ID,不要更改其他公司的ID。

+0

这就是我正在做的事,让我看看是否修复它 – 2010-10-21 18:31:18

+0

你明白了!我在控制器动作中添加一个新参数,重命名控制它的下拉列表,以便它将公司ID传递给控制器​​动作并使用session.load (companyId) – 2010-10-21 18:59:13

+0

吮吸,我不能设置你们两个作为正确的答案,因为你们都帮助我 – 2010-10-21 18:59:38

1

我不是100%肯定,但它确实看起来也许这里有一个错误:

temp.Company = ...(temp.Company.Id); 

我会弄清楚你实际上可以拉从一个输入参数。

此外,您还可以通过避免使用Session.Load()在这里打了一个数据库:

temp.Company = _session.Load<Company>(passedInCompanyId); 
+0

我害怕它没有工作。 :( – 2010-10-21 18:22:24