使用Automapper DTO实体时如何避免数据库中的重复记录

时间:2018-02-19 10:37:54

标签: entity-framework automapper automapping

对于单个CREATE,我正在尝试UPDATEPayment多个Order。 如果记录存在于数据库中(Primary Key Value is not the default value),我想更新记录,如果记录不存在于数据库中,我希望创建记录。目前,当我进行创建时,地图会根据Payment添加新订单,添加必要的Lines并添加Product项和{{ 1}}即使它们已经存在。

我在所有DTO对象中使用Wallet。这是一个例子

ReverseMap()

在OrderDTO,WalletDTO等中实现相同的逻辑。 如何在数据库中存在此记录时告诉AutoMapper不要创建新记录? 在控制器动作中,我尝试将子项附加到上下文中,如下conf.CreateMap<Payment, PaymentDTO>() .ForMember(dest => dest.Amount, opt => opt.MapFrom(src => src.Amount)) .ForMember(dest => dest.C_Order, opt => opt.MapFrom(src => src.C_Order)) .ForMember(dest => dest.C_Wallet, opt => opt.MapFrom(src => src.C_Wallet)) .ForMember(dest => dest.DateOf, opt => opt.MapFrom(src => src.DateOf)) .ForMember(dest => dest.ID, opt => opt.MapFrom(src => src.ID)) .ForMember(dest => dest.Order, opt => opt.MapFrom(src => src.Billing_Invoice)) .ForMember(dest => dest.Wallet, opt => opt.MapFrom(src => src.CashWallet)) .ReverseMap(); ,但似乎没有任何工作

这是数据库图表digram

1 个答案:

答案 0 :(得分:0)

对于数据库中存在的实体,将它们附加到DbContext,或者将它们的状态设置为Unchanged。

请参阅Entity Framework Add and Attach and Entity States