【发布时间】:2015-07-18 22:03:43
【问题描述】:
假设一个客户有很多电话号码,而一个电话号码只有一个客户。
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);
}
}
如果我像这样进行 EF 映射并运行它,每次我设置电话号码时,它都会创建新的 PhoneNumbers,但不会删除旧的。没有其他实体引用电话号码,我什至没有在我的 dbcontext 上公开它,有没有办法告诉 EF Customer 完全拥有 PhoneNumbers,因此如果电话号码从集合中删除,它们应该被删除?
我意识到有十几种方法可以解决这个问题,但这并不是一个奇怪的极端情况,处理这个问题的“正确”方法是什么。
【问题讨论】:
-
我认为如果您从 dbset 中删除电话号码并打开删除时的 cascasde ,那么它会产生您想要的结果:)
-
@JenishRabadiya 我认为删除时的级联可能会在删除
Customer时删除电话号码,但这特别是关于修改... -
请发布您尝试从
Customer中删除PhoneNumber的代码部分。 -
@Kilouco
SetPhones方法是迄今为止唯一可以做任何事情的方法。
标签: c# entity-framework orm mapping entity-framework-6