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、マッピングに問題があるように見えます。次の方法でマッピングをテストできます。TransactionsWalletUpdateModel

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