0

我正在尝试将模型映射到实体对象,但是当我映射从 DB 接收到的实体对象时 - 我的更改不会保存在数据库中。

这是一些代码:

映射配置:

Mapper.CreateMap<WalletUpdateModel, Wallet>()
    .ForMember(o => o.Name, m => m.MapFrom(d => d.Name))
    .ForMember(o => o.Currency, m => m.MapFrom(d => d.Currency));

实体对象:

public partial class Wallet
{
    public Wallet()
    {
        this.Transactions = new HashSet<Transaction>();
    }

    public int Id { get; set; }
    public int Owner { get; set; }
    public string Name { get; set; }
    public string Currency { get; set; }

    public virtual ICollection<Transaction> Transactions { get; set; }
}

型号声明:

public class WalletUpdateModel
{
    [Required]
    [Range(1, int.MaxValue)]
    public int Id { get; set; }

    [Required]
    [MaxLength(128)]
    public string Name { get; set; }

    [Required]
    [MaxLength(3)]
    [DataType(DataType.Currency)]
    public string Currency { get; set; }
}

以及来自即时窗口的一些调试信息:

w (before mapping)
{System.Data.Entity.DynamicProxies.Wallet_E3CA830BB5384920A3E07D4B44F15D2409093A34BFCED7CA33F9EC4102445554}
    [System.Data.Entity.DynamicProxies.Wallet_E3CA830BB5384920A3E07D4B44F15D2409093A34BFCED7CA33F9EC4102445554]: {System.Data.Entity.DynamicProxies.Wallet_E3CA830BB5384920A3E07D4B44F15D2409093A34BFCED7CA33F9EC4102445554}
    Currency: "PLN"
    Id: 2
    Name: "Cash"
    Owner: 1
    Transactions: Count = 0
w (after mapping)
{Financica.WebServices.Wallet}
    Currency: "PLN"
    Id: 2
    Name: "BZWBK"
    Owner: 0
    Transactions: Count = 0

请帮我解决这个问题,谢谢。

4

1 回答 1

0

对不起,但你还没有说哪个值被错误地映射。

由于具有相同名称的属性会按照约定自动映射,因此您当前的映射可以更改为:

Mapper.CreateMap<WalletUpdateModel, Wallet>();

如果您希望避免更新目标属性,可以使用该UseDestinationValue指令。如果您想对更新应用条件,您可以使用该Condition指令。如果您希望完全忽略该属性,可以使用该Ignore指令。

最后,您是否测试过您的映射以确保您没有遗漏任何内容?例如,您的映射看起来可能有问题,Owner因为Transactions它们没有在WalletUpdateModel类上定义。您可以使用以下内容测试您的映射:

Mapper.AssertConfigurationIsValid();
于 2012-12-09T22:14:58.397 回答