0

EF の新しい移行機能を使用したいのですが、web.config ファイルに "trust level=Medium" を追加して中程度の信頼環境をシミュレートすると、ローカル コンピューターで次のセキュリティ例外が発生します。

   System.Reflection.RuntimeMethodInfo.GetMethodBody() +24
   System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration, DbContext usersContext) +1031
   System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration) +66
   System.Data.Entity.MigrateDatabaseToLatestVersion`2.InitializeDatabase(TContext context) +52
   System.Data.Entity.<>c__DisplayClass2`1.<SetInitializerInternal>b__0(DbContext c) +75
   System.Data.Entity.Internal.<>c__DisplayClass8.<PerformDatabaseInitialization>b__6() +19
   System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) +72
   System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() +185
   System.Data.Entity.Internal.LazyInternalContext.<InitializeDatabase>b__4(InternalContext c) +7
   System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input) +118
   System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action) +190
   System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase() +73
   System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +28
   System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() +57
   System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() +15
   System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() +37
   System.Linq.Queryable.Where(IQueryable`1 source, Expression`1 predicate) +63

EF 移行は完全信頼でのみ機能しますか?

4

3 に答える 3

2

あなたの考慮事項:EFと中程度の信頼環境での私の場合の問題を発見しました。

この記事を読み、コードを修正した後、私の EF モデル クラスの 1 つが、プライベート プロパティを持つ別のクラスを集約していることに気付きました。EF はこれらのプロパティを読み込もうとしているようですが、中程度の信頼環境では許可されていません。この参照をモデル クラスから削除すると (代わりに必要なプロパティをコピーするようになりました)、ReflectionPermission 例外が発生する問題が解決されました。

これが役に立たない場合は、別のオプションがあり、一部の人々はそれが役に立ったと主張しています. モデル ファイルの先頭または AssemblyInfo.cs に次の属性を追加します。

[assembly:AllowPartiallyTrustedCallers]

詳しくはこちらをご覧ください。

于 2012-09-17T14:59:38.823 に答える
2

最初のEF 移行 CTPでは、完全な信頼の制限について、将来のリリースで対処できることに言及しましたが、今後のリリースではこの制限が修正されたとは言及されていないため、おそらくまだ存在します。

于 2012-04-01T15:20:45.257 に答える
0

System.Data.Entity.Migrations.DBMigratorクラス コンストラクターで次のコードを置き換えることができます。

if (method != null)
{
    this._hasSeedLogic = method.GetMethodBody().GetILAsByteArray().Length > 2;
}

に:

if (method != null)
{
    this._hasSeedLogic = true;
}

Reflector と Reflexil プラグインを使用します。このハッキングの後、中程度の信頼環境で動作します。

信頼できる場合は、ここからパッチを適用した dll (EF 5.0 ベータ 2) をダウンロードできます

于 2012-04-30T11:36:36.740 に答える