0

開発者が最初の作成後にコードの主キーを手動またはプログラムで更新できないようにするチェックの実装に問題があります。

 partial class User
{
    public User()
    {
        this.UserId = sGuid.NewSGuid(sGuidType.SequentialAtEnd);
    }

    partial void OnUserIdChanging(Guid value)
    {
        //throw if its an edit...
        throw new DbEntityValidationException("Cannot mutate primary key");
    }

}

これは、オブジェクトを編集/更新している場合は正常に機能しますが、実際には、最初から新しいエンティティを作成することはできません。この時点で、新しいエンティティか既存のエンティティかを確認する方法はありますか?

よろしくお願いします、ピート

アップデート:

典型的な私は投稿した後にいつも答えを見つけます-_-!あなたの答えの人に感謝します、彼らが有効な選択肢だったので、私はあなたの1人を正解としてマークします。

if (this.EntityState != System.Data.EntityState.Detached)
{
    throw new DbEntityValidationException("Cannot mutate primary key");
}
4

1 に答える 1

1

この問題は通常、主キーセッターprivateまたはprotected:を作成することで解決されます。

public class MyEntity
{
  public int Id { get; private set; }
}

EFデザイナーを使用している場合は、デザイナーでプロパティを選択し、プロパティグリッドで適切なアクセス修飾子を設定するだけです。残りはコードジェネレーターが行います。

于 2013-02-08T14:39:33.107 に答える