我正在尝试将模型映射到实体对象,但是当我映射从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
请帮我解决这个问题,谢谢。
答案 0 :(得分:0)
很抱歉,但您仍未说明哪个值映射不正确。
由于具有相同名称的属性会按惯例自动映射,因此您当前的映射可以更改为:
Mapper.CreateMap<WalletUpdateModel, Wallet>();
如果您希望避免更新目标属性,可以使用UseDestinationValue
指令。如果要将条件应用于更新,可以使用Condition
指令。如果您希望完全忽略该属性,可以使用Ignore
指令。
最后,你测试了你的映射以确保你没有遗漏任何东西吗?例如,您的映射看起来可能与Owner
和Transactions
存在问题,因为它们未在WalletUpdateModel
类中定义。您可以使用以下内容测试映射:
Mapper.AssertConfigurationIsValid();