1

私はEF4コードファーストで少し問題を抱えています(実際にCFを使用するだけで問題になると思います)。

次のようなコードを使用して、コンテキスト メタデータからエンティティ タイプの情報を取得しようとしています。

return (context as System.Data.Entity.Infrastructure.IObjectContextAdapter)
            .ObjectContext.MetadataWorkspace
            .GetItems<EntityType>(DataSpace.CSpace)
            .Where(x => x.FullName == ModelType.FullName)
            .FirstOrDefault();

ModelType は、検索するエンティティの System.Type を含むパラメーターです。型のメタデータを含む System.Data.Metadata.Edm.EntityType インスタンスを返す必要があります。

DbSet で参照されるモデルは MyApp.Models.User という名前で、DbContext クラスは MyApp.Servicing 名前空間の下に作成されました

今私が抱えている問題は、System.Data.Metadata.Edm.EntityType の FullName プロパティがMyApp.Models.User ではなくMyApp.Servicing .User (O_O) であることです。

コードファーストでEDMXを持っていないので、EFがedmメタデータを嘲笑している可能性があると思いますが、それは推測です。

なぜこれが起こるのですか?別の方法で解決できますが、その理由を知りたいです。

4

1 に答える 1

4

間違ったスペースを使用しています。CSpace は最上位層です。「DataSpace.OSpace」を使用している場合は、探している完全修飾クラス名を取得できます。

   var OSpaceEntityType= (context as System.Data.Entity.Infrastructure.IObjectContextAdapter)
     .ObjectContext.MetadataWorkspace
     .GetItems<EntityType>(DataSpace.OSpace)
     .FirstOrDefault(x => x.FullName == ModelType.FullName);

...そして、CSpace ストアから対応する EntityType を取得します。

   var CSpaceEntityType= (context as System.Data.Entity.Infrastructure.IObjectContextAdapter)
     .ObjectContext.MetadataWorkspace
     .GetItems<EntityType>(DataSpace.CSpace)
     .FirstOrDefault(e => e.Name == OSpaceEntityType.Name);
于 2013-09-19T23:30:36.783 に答える