1

標準テンプレートで生成された Account という EF 5 エンティティがあります。

プロパティ AccountTypeId があります。

変更されたら、別のフィールドを更新できるように通知が必要です。

これは通常どのように行われますか? これは 1 つのプロパティにのみ必要なので、変更されたテンプレートを使用したくありません。

AccountTypeId は WinForms の UI で ComboBox にバインドされているため、WPF で通常行うような MVVM アプリではありません。

4

2 に答える 2

2

PropertyChanged.Fodyという NuGet パッケージを使用して、数行のコードでこれを行うことができます。パッケージのドキュメントはGitHubにあります。私の CodeProject のヒント「Entity Framework クラスへの INotifyPropertyChanged の追加」を参照してください。

この手法は、クラス内のすべてのプロパティに対して INPC を実装することを指摘しておく必要があります。単一のプロパティに対してのみ INPC が必要で、T4 テンプレートまたは EDMX ファイルを変更したくない場合は、エンティティ クラスが「partial」キーワードで生成されるという事実を利用して、「ラッパー」を追加できます。 Erik Philipsが説明したように、別の(生成されていない)ファイルのプロパティ。ラッパー プロパティを参照するように既存のコードを変更する必要がありますが、モデルまたはエンティティを再生成しても問題はありません。

于 2014-12-16T17:49:22.960 に答える
2

1 つの方法は、EDMX に移動してフィールドの名前を AccountTypeID_Internal に変更し (たとえば)、EDMX でプロパティを に設定することPrivateです。次に、部分クラスを作成します。

生成された Account.cs は次のようになります。

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace <yournamespace>
{
    using System;
    using System.Collections.Generic;

    public partial class Account
    {
        private int AccountTypeId_Internal  { get; set; }

        // other auto generated properties
    }
}

Account.Partial.Cs

public partial class Account : INotifyPropertyChanged
{
  public Int AccountTypeId
  {
    get
    {
      return this.AccountTypeId_Internal;
    }
    set
    {
      this.AccountTypeId_Internal = value;
      // Do INotifyPropertyChangedLogic
    }
  }

  // Implement INotifyPropertyChanged
}

この利点は、既に作成されたコードをまったく変更する必要がないことです。欠点は、edmx からアカウントを削除して再度追加すると、edmx の手順を再度実行する必要があることです。

于 2013-09-16T19:42:42.070 に答える