Geo*_*uer 11 c# mapping orm entity-framework entity-framework-6
假设客户有许多电话号码,而电话号码只有一个客户.
public class PhoneNumber : IValueObject {
public string Number {get; set;}
public string Type {get; set;}
}
public class Customer : IEntity {
public ICollection<PhoneNumber> phones {get; private set;} //ew at no encapsulated collection support
public void SetPhones(params PhoneNumber[] phones) {
this.phones.Clear();
this.phones.AddRange(phones);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我像这样进行EF映射并运行它,每次设置电话号码都会创建新的PhoneNumbers但不删除旧的.没有其他实体引用电话号码,我甚至没有在我的dbcontext上公开它,有没有办法告诉EF 完全Customer拥有PhoneNumbers,因此如果从集合中删除了电话号码,他们应该被删除?

我意识到有十几种方法来解决这个问题,但这不是一个奇怪的边缘情况,处理这个问题的"正确"方法是什么.
Qui*_*ith 11
我有完全相同的问题:)
关于识别关系的答案解决了我的问题.
注意:您必须加载集合(热切,明确或懒惰),以便在设置新值和调用save之前跟踪它.否则你不会更换集合,只是添加它.
例如:
var entity = unitOfWork.EntityRepository.GetById(model.Id);
// I have something like this to load collection because
// I don't have the collection's entities exposed to the context
unitOfWork.EntityRepository.LoadCollection(entity, e => e.CollectionProperty);
entity.CollectionProperty = newCollectionValuesList;
unitOfWork.Save();
Run Code Online (Sandbox Code Playgroud)
这将从"集合表"中删除以前的集合值,并仅添加新设置的值.
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
6286 次 |
| 最近记录: |