[英]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.