2012-03-31 3 views
0

Я хотел бы использовать новую функцию переноса EF, но на моей локальной машине, когда я имитирую среду среднего доверия, добавляя в файле web.config «уровень доверия = средний», я получаю это исключение безопасности:Entity Framework 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

+0

Я хочу знать, не могут ли миграции работать в среде доверия или у меня есть некоторые проблемы на моей машине. –

+1

Обновите свой вопрос, чтобы сделать это ясно и добавить любую информацию об исключении или ошибке, которую вы получаете. – Steven

ответ

2

Первый EF migrations CTP упомянул ограничение на полное доверие, отметив, что его можно решить в будущей версии, но никакой выпуск в будущем не упоминал об этом ограничении как фиксированное, поэтому он, скорее всего, все еще существует.

+0

Thanks Ladislav. –

+0

Есть ли в Entity Framework Code First Migrations все еще требуется Full Trust для версии 4.3? – IsmailS

+1

@iSid: вопрос был для версии 4.3, а примечания к выпуску для 4.3.1 не упоминались об этом как исправленные, поэтому я предполагаю, что да. –

0

Вы можете заменить следующий код в System.Data.Entity.Migrations.DBMigrator конструктор класса:

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

к:

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

с отражателем и РЕФЛЕКСИЛ плагин. После этого взлома он будет работать в среде среднего доверия.

Если вы мне доверяете, вы можете скачать исправленный DLL (EF 5,0 беты-2) от here

2

К вашему вниманию: я только что обнаружил, что была проблема в моем случае с EF и доверием среды среды ,

После прочтения this article и внесения некоторой ревизии кода я обнаружил, что один из моих классов модели EF объединяет другой класс с частными свойствами. Похоже, что EF пытается загрузить те свойства, которые не разрешены для него в среде среднего доверия. Удаление этой ссылки из моего класса модели (теперь я копирую необходимые свойства) решил мою проблему, которая привела к исключению ReflectionPermission.

Если это не поможет, есть еще один вариант, который некоторые утверждают, что он им помог. Добавить этот атрибут в самого начало вашего файла модели или в AssemblyInfo.cs:

[assembly:AllowPartiallyTrustedCallers] 

Подробнее о it here.

Смежные вопросы