2011-04-05 6 views
1

J'ai un problème qui pourrait être simple mais je ne peux rien trouver à ce sujet. J'utilise EF 4.1 Code First sur un db hérité. Dans notre environnement de développement, toutes les tables sont sous le propriétaire "dbo", mais en production certaines sont sous un autre utilisateur, disons "myuser".Code EF premier propriétaire et Db

Je mappe mon objet avec la méthode "ToTable" spécifiant uniquement le nom de la table sans le propriétaire. De cette façon, EF essaie automatiquement de continuer [dbo]. [TableName] et en production renvoie une erreur de nom d'objet non valide, car la table est [myuser]. [TableName]

Existe-t-il un moyen d'indiquer à EF d'ignorer le propriétaire de DB lors de la cartographie des tables? Je ne peux pas changer de propriétaire dans l'environnement de production, et je ne peux pas répliquer pour d'autres raisons la configuration de production dans notre développement db.

Merci.

Répondre

1

Vous pouvez définir le schéma lors de l'exécution.

public class YourDbContext : DbContext 
{ 
    public IDbSet<SomeObject> SomeObjects { get; set; } 
    public IDbSet<SomeOtherObject> SomeOtherObjects { get; set; } 
    public IDbSet<YetAnotherObject> YetMoreObjects { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 

     modelBuilder.Configurations.Add(new RuntimeSchemaConfiguration<SomeObject>()); 
     modelBuilder.Configurations.Add(new RuntimeSchemaConfiguration<SomeOtherObject>()); 
     modelBuilder.Configurations.Add(new RuntimeSchemaConfiguration<YetAnotherObject>()); 
    } 

    private class RuntimeSchemaConfiguration<T> : EntityTypeConfiguration<T> 
     where T : class 
    { 
     public RuntimeSchemaConfiguration() 
     { 
      // Rename the schema based on a string 
      // from a config file or other source 
      var schemaName = GetSchemaNameFromConfigFile(); 
      ToTable(typeof(T).Name, schemaName); 
     } 
    } 
} 
+0

Cela semble intéressant, je vais vérifier demain, et je vous le ferai savoir. Merci. –

Questions connexes