2011-11-03 74 views
0

我在这里遇到问题,无法解决此问题。C#&Nhibernate - 将一个实体列表保存到另一个实体

我有2类:

public class Previa 
    { 
     public virtual int Id { get; set; } 
     public virtual DateTime Date { get; set; } 
     public virtual string Description { get; set; } 
     public virtual IList<ItemPrevia> ListItemPrevia{ get; set; } 
    } 

public class ItemPrevia 
    { 
     public virtual int Id { get; set; } 
     public virtual string Description { get; set; } 
     public virtual decimal Price { get; set; } 
     public virtual Previa Previa { get; set; } 
    } 

和映射:

public class PreviaMap : ClassMap<Previa> 
    { 
     public PreviaMap() 
     { 
      Id(f => f.Id) 
       .Length(11); 
      Map(f => f.Date) 
       .Not.Nullable(); 
      Map(f => f.Description) 
       .Not.Nullable(); 
      HasMany<ItemPrevia>(m => m.ListItemPrevia) 
       .Table("ItemPrevia") 
       .Inverse() 
       .Cascade.AllDeleteOrphan() 
       .Not.LazyLoad(); 
     } 
    } 
public class ItensPreviaMap : ClassMap<ItemPrevia> 
{ 
    public ItensPreviaMap() 
    { 
     Id(f => f.Id) 
      .Length(11); 
     Map(f => f.Description) 
       .Not.Nullable(); 
      Map(f => f.Price) 
       .Not.Nullable(); 
     References(f => f.Previa).Column("IdPrevia").Not.LazyLoad(); 
    } 
} 

在我的系统我必须要注册一个普瑞维亚后,包括一些ItemPrevia。 但是,我可以通知另一个Previa并将您的项目复制到当前Previa

我该如何坚持其他Previa目前的Previa? 我试试这个:

Previa objPreviaOld = new Previa(); 
objPreviaOld = PreviaBLL.Search(Convert.ToInt32(txtPreviaOld.Text)); 
if (objPreviaOld != null) 
{ 
     foreach (ItemPrevia objItemPrevia in objPreviaOld.ListItemPrevia) 
     { 
      objItemPrevia.Id = 0; 
      objItemPrevia.Previa = objPrevia; 
      objPrevia.ListItemPrevia.Add(objItemPrevia); 
     } 
     PreviaBLL.Alter(objPrevia); 
} 

但出现此错误:Domain.Entities.ItemPrevia的实例标识从50改为0

有人帮帮我吗?

+1

这是因为您逻辑*更新对象,即使您认为您正在添加它们。请尝试使用构造函数创建新对象,并复制值。 –

回答

1

@Merlyn Morgan-Graham说你必须将数据复制到新的对象。

Previa PreviaOld = PreviaBLL.Search(Convert.ToInt32(txtPreviaOld.Text)); 
if (objPreviaOld != null) 
{ 
     foreach (ItemPrevia itemPrevia in objPreviaOld.ListItemPrevia) 
     { 
      PreviaNew.ListItemPrevia.Add(new ItemPrevia 
      { 
       Previa = PreviaNew, 
       Prop1 = itemPrevia.Prop1, 
       Prop2 = itemPrevia.Prop2, 
       Prop3 = itemPrevia.Prop3, 
       Prop4 = itemPrevia.Prop4, 
      }); 
     } 
     PreviaBLL.Alter(PreviaNew); 
} 
相关问题