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 迁移 CTP提到了完全信任限制,并注意它可以在未来的版本中解决,但没有未来版本提到这个限制是固定的,所以它很可能仍然存在。

于 2012-04-01T15:20:45.257 回答
2

供您考虑:我刚刚发现我的 EF 和中等信任环境存在什么问题。

在阅读了这篇文章并进行了一些代码修改后,我发现我的一个 EF 模型类聚合了另一个具有私有属性的类。似乎 EF 尝试加载这些属性,这在中等信任环境中是不允许的。从我的模型类中删除此引用(我现在复制所需的属性)解决了导致 ReflectionPermission 异常的问题。

如果这没有帮助,还有另一种选择,有些人声称它帮助了他们。在模型文件的开头或在 AssemblyInfo.cs 中添加此属性:

[assembly:AllowPartiallyTrustedCallers]

在此处阅读更多相关信息。

于 2012-09-17T14:59:38.823 回答
0

System.Data.Entity.Migrations.DBMigrator您可以在类构造函数中替换以下代码:

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

到:

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

带有 Reflector 和 Reflexil 插件。在这个 hack 之后,它将在中等信任环境中工作。

如果你相信我,你可以从这里下载修补的 dll (EF 5.0 beta 2)

于 2012-04-30T11:36:36.740 回答