2012-03-31 77 views
0

我想使用EF的新迁移功能,但在我的本地机器上模拟中等信任环境在web.config文件中添加“trust level = Medium”时,我得到此安全例外:实体框架4.3迁移和中等信任

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迁移仅在完全信任状态下工作?

+0

你到底想知道什么? – Steven 2012-03-31 10:53:06

+0

我想知道迁移是否无法在中等信任下运行,或者我的机器出现问题。 – 2012-03-31 13:56:19

+1

更新您的问题以清楚地说明问题,并添加关于您正在获取的异常或错误的任何信息。 – Steven 2012-03-31 16:43:00

回答

2

第一个EF migrations CTP提到了完全信任限制,注意它可以在将来的版本中解决,但是没有将来的版本提到这个限制是固定的,所以它很可能仍然存在。

+0

谢谢拉迪斯拉夫。 – 2012-04-02 16:47:06

+0

实体框架代码优先迁移是否仍需要完全信任4.3版本? – IsmailS 2012-05-28 07:40:15

+1

@iSid:问题在于4.3版本,4.3.1的发布说明没有提到这是固定的,所以我假设是。 – 2012-05-28 09:04:55

0

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

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

到:

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

与反射器和Reflexil插件。在这之后,它将在中等信任环境中工作。

如果你相信我,你可以从here

2

下载补丁的DLL(EF 5.0测试版2)您的考虑: 我刚刚发现了什么是我的情况与EF和中等信任环境问题。

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

如果这不起作用,还有另一种选择,有些人认为它有助于他们。 在你的模型文件的beggining或AssemblyInfo.cs中添加这个属性:

[assembly:AllowPartiallyTrustedCallers] 

了解更多关于it here