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