9

エンティティに「デフォルト」の Id 生成サポートを実装したいと考えています。

エンティティを保存するとき、エンティティの id 値がまだ設定されていない場合にのみ、EntityFramework が生成するようにしたいと思います。ID に null 以外のゼロ以外の値が既に含まれている場合は、エンティティをデータベースに保存するときに、そのエンティティ ID を保持したいと考えています。

レガシ データ モデル (古いデータベースから作成された EntityFramework モデル) から新しく作成された (モデル ファースト) EntityFramework モデルにデータを移行しています。旧モデルをA、新モデルをTとしましょう。

通常、新しいモデルを長期間使用するために、保存時に T エンティティに Id を設定する必要があります (それらはすべて int64 です)。

現在、移行元の対応する A エンティティの ID に基づいて、T エンティティ ID を明示的に割り当てています。これは、移行結果を簡単に確認できるようにするためです。

ただし、移行ルーチンで T エンティティの ID を A エンティティと同じ ID に割り当てることはできますが、エンティティを保存した後、ID 値が変更されています。

Tモデルのすべてのエンティティのデフォルトの保存方法をオーバーライドして、保存する前にエンティティにまだ設定されていない場合にのみid値が割り当てられるようにする方法はありますか?

ここで他の EntityFramework/Id の質問をいくつか見てきましたが、私の考えでは、同じことを尋ねているものはありません。

リードをありがとう。

4

2 に答える 2

3

現在の私よりも EF についてよく知っている何人かの友人との検索、読書、および議論を続けた後、現在の Entity Framework 実装で私が探しているものを達成するための唯一の実用的で持続可能な方法は、カスタム Entity Framework を作成することだと思いますこのブログ投稿で説明されているように、プロバイダー。

これを実装する時間があるかどうかは、私が理解しなければならないことですが、少なくともこの答えをまとめたいと思いました。カスタム プロバイダーを使用すると、エンティティの読み取り時の復号化/書き込み時の暗号化属性も実装できます。

ただし、これらの機能は両方とも、EntityFramework の将来のリリースに組み込まれることを期待しています。

于 2011-04-26T23:34:40.527 に答える
3

Model First を使用しているとのことでした。ただし、役立つかもしれない Code First サンプルがあります。

T エンティティでは、id プロパティに [Key] 属性がありますね。その場合は、別の属性DatabaseGeneratedAttributeを使用して、ID を強制的に設定できます。

public class SomeEntity
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int? SomeEntityID { get; set; }
}

また、同様の結果を得るための Fluent API 呼び出しもあります。

public class YourContext : DbContext
{
    protected override void OnModelCreating( DbModelBuilder dbModelBuilder )
    {
        base.OnModelCreating( dbModelBuilder );

        var config = dbModelBuilder.Entity<SomeEntity>();
        config.Property(e => e.SomeEntityID).HasDatabaseGeneratedOption( DatabaseGeneratedOption.None);
    }
}
于 2011-04-13T06:10:52.817 に答える