独自の永続 objectMngr を持つ古いアプリケーションを新しいエンティティ フレームワークに移動しようとしていますが、これは正常に機能します。問題は、古い ObjectMngr が主キーを文字列として、場合によっては独自の形式で保存していたことです。互換性のある永続レイヤーを実装するには、同じ形式を使用するように EF を構成するか、最終的にエンティティ PK の保存を変更する必要があります。 .
これは可能だと思いますが、どこでそれを行うことができるか知っていますか?
thnx
独自の永続 objectMngr を持つ古いアプリケーションを新しいエンティティ フレームワークに移動しようとしていますが、これは正常に機能します。問題は、古い ObjectMngr が主キーを文字列として、場合によっては独自の形式で保存していたことです。互換性のある永続レイヤーを実装するには、同じ形式を使用するように EF を構成するか、最終的にエンティティ PK の保存を変更する必要があります。 .
これは可能だと思いますが、どこでそれを行うことができるか知っていますか?
thnx
この質問は 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 の特別IEntity
なMyEntity
世代に依存しMyEntities
、ObjectContext
. IdGenerator
主キーを提供する方法を提供する必要があります。このコードでは、プロパティId
が生成されたコードに配置されていることも必要です。
StoreGeneratedPattern
主キー プロパティをに設定する必要がありますNone
。その後、古いソリューションで使用していたのと同じコードを使用して、主キーの値を自分で割り当てることができます。