C # & Nhibernate - Сохранять список из одной сущности в другую - PullRequest
0 голосов
/ 03 ноября 2011

У меня есть проблема, и у меня нет идей для ее решения.

У меня есть 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; }
    }

и Mapping:

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 Ответ

1 голос
/ 07 ноября 2011

как сказал @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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...