2012-03-31 5 views
0

Je voudrais utiliser la nouvelle fonctionnalité de migration de EF, mais sur mon ordinateur local lorsque je simule un environnement de confiance moyenne en ajoutant "niveau de confiance = Moyen" sur le fichier web.config, je reçois cette exception de sécurité:Entity Framework 4.3 Migrations et moyenne confiance

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 

Les migrations EF fonctionnent uniquement en mode confiance totale?

+0

Qu'est-ce que vous voulez exactement savoir? – Steven

+0

Je veux savoir si les migrations ne peuvent pas fonctionner en confiance moyenne ou si j'ai des problèmes sur ma machine. –

+1

Mettez à jour votre question pour clarifier cette question et ajoutez des informations sur l'exception ou l'erreur que vous obtenez. – Steven

Répondre

2

Le premier EF migrations CTP a mentionné la limitation de confiance totale avec la mention qu'il peut être adressé dans la future version, mais aucune version ultérieure n'a mentionné cette limitation comme étant fixée, de sorte qu'elle existe probablement encore.

+0

Merci Ladislav. –

+0

Est-ce que Entity Framework Code First Migrations requiert toujours la confiance totale sur la version 4.3? – IsmailS

+1

@iSid: La question était pour la version 4.3 et les notes de version pour 4.3.1 ne l'ont pas mentionné comme corrigé, donc je suppose que oui. –

0

Vous pouvez remplacer le code suivant dans le constructeur System.Data.Entity.Migrations.DBMigrator de classe:

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

à:

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

avec réflecteur et plug-in Reflexil. Après ce hack, il fonctionnera dans un environnement de confiance moyenne.

Si vous me faites confiance, vous pouvez télécharger le dll patché (EF 5.0 beta 2) de here

2

Pour votre considération: Je viens de découvrir quel était le problème dans mon cas avec EF et de l'environnement de confiance moyen . Après avoir lu this article et fait une révision de code, j'ai découvert que l'une de mes classes de modèle EF agrège une autre classe qui a des propriétés privées. Il semble que EF essaie de charger ces propriétés, ce qui n'est pas autorisé dans un environnement de confiance moyenne. En supprimant cette référence de ma classe de modèle (je copiais maintenant les propriétés nécessaires), j'ai résolu mon problème qui résultait de l'exception ReflectionPermission.

Si cela ne va pas aider, il existe une autre option que certaines personnes affirment que cela les a aidés. Ajouter cet attribut au beggining de votre fichier modèle ou AssemblyInfo.cs:

[assembly:AllowPartiallyTrustedCallers] 

En savoir plus sur it here.

Questions connexes