1

コードファーストのEntityFrameworkを使用する場合、1つのプロパティを他のプロパティよりも先に設定する必要があります。データベースからオブジェクトを作成するときに、プロパティセットを呼び出す順序を指定するにはどうすればよいですか。

例えば

public class Person
{
    public string Name { get; set; }
    public string Something 
    { 
        get { return something; } 
        set
        {
             something = value + " for " + Name;
        }
    }

    private string something;
}

上記のコードでは、Somethingプロパティを設定するまでにNameプロパティがすでに設定されている必要があります。

これは実際の例ではありません-文字通りそれを達成する他の方法があることを私は知っていますが、私はそれらの後にはありません、何かの前に名前を設定するようにEFに指示する方法だけです。

4

1 に答える 1

0

私はあなたの質問の文脈を理解しようとしています。私は次のような仮定を立てます:

  1. セッターに渡された値は、別の計算されたプロパティではありません
  2. セッターに渡される値は、データベースに格納されることを意図しています
  3. 名前が更新された場合、新しい名前を反映するために何かを更新したいですか?

ここでの間違いは、保存しようとしている値に派生部分を追加しようとしていると思います。別のプロパティまたは get でプリティ ネームを計算します。

UPDATEには、Something プロパティの get をオーバーライドする例がありましたが、悪い習慣だと感じたため削除されました。

public class Person
{
public string Name { get; set; }

public string Something { get; set; }

public string getFancySomething { 
    { return Something + " for " + Name; } 
}
}

最後に-(このようなことをする必要がある状況に遭遇していないので、ここで助けを借りることができます)私の推測では、部分的に計算されたプロパティSomethingをあなたが試みていた方法で保存する必要はありません、しかし必要な場合は、追加の詳細が誰かがより良い答えを提供するのに役立つと思います.

UPDATE 2 私のコメントで説明されているように-これが機能するかどうかはわかりませんが、非常に間違っているように感じますが、次のようなことを試すことができます:

modelBuilder.Entity<Person>().Ignore(x => x.Something);

そしてセッターで:

public class Person
{
public string Name { 
   get { return Name; }
   set { 
       Name = value;

       Something = lookup();
    }
}
}

繰り返しますが、これはニーズに依存し、この値を渡す必要性を満たさないでしょう。これが素晴らしいアイデアであるかどうかはわかりません。

于 2013-01-17T23:18:42.360 に答える