簡體   English   中英

使用Entity Framework 4.0的延遲加載更新具有導航屬性的分離的實體實例

[英]Updating a Detached Entity Instance with Navigation Properties using Lazy Loading with Entity Framework 4.0

我有一個具有導航屬性的獨立實體:

public class ClassA
{
   public int Id { get; set; }
   public string Name { get; set; }

   public virtual ICollection<ClassB> ClassB
   {
      get
      {
         if (_classB == null)
         {
            var newCollection = new FixupCollection<ClassB>();
            newCollection.CollectionChanged += FixupClassB;
            _classB = newCollection;
         }
         return _classB;
      }
      set
      {
         if (!ReferenceEquals(_classB, value))
         {
            var previousValue = _classB as FixupCollection<ClassB>;
            if (previousValue != null)
            {
               previousValue.CollectionChanged -= FixupClassB;
            }
            _classB = value;
            var newValue = value as FixupCollection<ClassB>;
            if (newValue != null)
            {
               newValue.CollectionChanged += ClassB;
            }
         }
      }
   }
   private ICollection<ClassB> _classB;

   private void FixupClassB(object sender, NotifyCollectionChangedEventArgs e)
   {
      if (e.NewItems != null)
      {
         foreach (ClassB item in e.NewItems)
         {
            item.ClassA = this;
         }
      }

      if (e.OldItems != null)
      {
         foreach (ClassB item in e.OldItems)
         {
            if (ReferenceEquals(item.ClassA, this))
            {
               item.ClassA = null;
            }
         }
      }
   }
}

我的創建方法工作完美。 它將ObjectA實例插入數據庫中,然后將集合中的ClassB實例插入數據庫中。 該方法只是做:

context.ClassA.AddObject(classA);

但是,當我調用它時,我的更新方法不會插入/更新/刪除ClassB的實例。 方法是這樣的:

public virtual void Update(List<ClassA> entities, TrialsContext context)
{
   foreach (ClassA entity in entities)
   {
      ClassA original = context.ObjectA.First(x => x.Id == entity.Id)

      if (original != null)
      {
         context.ObjectA.ApplyOriginalValues(original);
         context.ObjectA.ApplyCurrentValues(entity);
      }
   }
}

有什么原因會失敗嗎? 當我關閉延遲加載並充分充實我的實體時,它可以完美工作,但是,這對性能造成了影響。 我有什么選擇?

必須使用自我跟蹤實體來實現目標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM