2009-09-24 266 views
2

鉴于这些实体自动通过EF生成...(伪)实体框架:合并到实体导航属性

class CreditCard 
{ 
    int ID {get;set;} 
    string Number {get;set;} 
} 
class Person 
{ 
    EntityCollection<CreditCard> CreditCards {get; set;} 
} 

什么是断开的列表合并到人的CreditCards财产的最好方式。

列表将在基于UserInput的WebForm上构建。该列表将包含新的CreditCards(添加),对现有CreditCards(更新)的更改,并且不包含用户已删除的CreditCards。

下一页(我需要帮助的挑战)是采取断开的名单,并与Person实例的CreditCards财产合并了,

这个合并过程将(A)新实例添加到列表,(B)更新现有实例和(C)删除未连接列表中不存在的实例。

是否有一种事实上的EF设计来处理这个问题,或者它是一个手动过程?如果是手动的,那么以通用的方式实现这一目标的最好方法是什么?

回答

2

很显然,我敢迟到了这里,但除非我错了,你的信用卡,creditCardList,列表是List<CreditCard>类型的,你想会是类似于:

Person yourPerson = Context.Persons 
          .Include("CreditCards") 
          .First<Person>(p => p.PersonId == yourPersonId); 

yourPerson.CreditCards.Clear(); 
creditCardList.ForEach(cc => yourPerson.CreditCards.Add(cc)); 
Context.SaveChanges(); 

我不确定这是行不通的,还是有其他需要的东西。

+0

难道这不会用新ID创建新的信用卡吗?或者,这是否会简单地覆盖/更新原始存在的信用卡数据(检查主键等)。如果信用卡有一个孩子实体,情况会是怎样? – user3141326 2015-11-27 12:45:13