C#& Nhibernate - 将一个实体的项目列表保留到另一个实体

时间:2011-11-03 18:45:06

标签: c# nhibernate fluent-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();
     }
 }

在我的系统中,我必须注册 Previa ,然后包含一些 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 个答案:

答案 0 :(得分: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);
}
相关问题