1

独自の永続 objectMngr を持つ古いアプリケーションを新しいエンティティ フレームワークに移動しようとしていますが、これは正常に機能します。問題は、古い ObjectMngr が主キーを文字列として、場合によっては独自の形式で保存していたことです。互換性のある永続レイヤーを実装するには、同じ形式を使用するように EF を構成するか、最終的にエンティティ PK の保存を変更する必要があります。 .

これは可能だと思いますが、どこでそれを行うことができるか知っていますか?

thnx

4

2 に答える 2

1

この質問は Stackoverflow で何度か出されました。次の回答をお読みください: Entity Framework 4 Code First は NHibernate のような ID ジェネレーターをサポートしていますか?

あなたが説明した問題を解決します。あなたの場合のようにコード ファースト アプローチを使用しない場合は、ObjectContext から継承する生成されたクラスで SaveChanges メソッドを上書きします。クラス DbContext は、Code First アプローチでのみ使用されます。例えば:

public interface IEntity
{
    string Id { get; set; }
}

public partial class MyEntity: IEntity
{
}

public partial class MyEntities
{
    public override int SaveChanges(System.Data.Objects.SaveOptions options)
    {
        var generator = new IdGenerator();

        foreach(var entry in this.ObjectStateManager.GetObjectStateEntries(EntityState.Added))
        {
            var entity = entry.Entity as IEntity;
            if (entity != null)
            {
                entity.Id = generator.CreateNewId();
            }
        }

        return base.SaveChanges(options);
    }
}

この例では、PK の特別IEntityMyEntity世代に依存しMyEntitiesObjectContext. IdGenerator主キーを提供する方法を提供する必要があります。このコードでは、プロパティIdが生成されたコードに配置されていることも必要です。

于 2012-06-14T12:24:04.430 に答える
1

StoreGeneratedPattern主キー プロパティをに設定する必要がありますNone。その後、古いソリューションで使用していたのと同じコードを使用して、主キーの値を自分で割り当てることができます。

于 2012-06-12T07:03:23.800 に答える