2016-08-26 4 views
3

Je donne les résultats suivants:Comment accéder au fichier sql à partir de Seed() dans EF?

string sproc = AppDomain.CurrentDomain.BaseDirectory + "/Stored Procedures/new_message.sql"; 
    context.Database.ExecuteSqlCommand(sproc); 

Cependant, le chemin sproc est valide pour une raison quelconque. Quelle est la méthode appropriée pour accéder aux fichiers de votre répertoire de projet à partir de la méthode Seed de migration de code EF-first?

enter image description here

+0

Donnez-vous intentionnellement le chemin à ' ExecuteSqlCommand' méthode? –

+0

S'il existait une méthode permettant de transmettre un nom de fichier, vous pouvez vous attendre à ce que le nom soit * ExecuteSqlComandFromFile *. Mais ce n'est pas le cas et vous avez donc dû passer la commande elle-même (lisez le contenu du fichier et passez ce contenu à la méthode) –

+0

Possible duplicate of [Exécution d'un script SQL stocké en tant que ressource] (https://stackoverflow.com/questions/1379195/executing-a-sql-script-stored-as-a-resource) –

Répondre

3

Si ces fichiers .sql sont stockés sous forme ressources incorporées dans votre assemblée, alors vous pouvez faire quelque chose comme ceci:

Assembly asy = Assembly.GetExecutingAssembly(); 

Stream stm = asy.GetManifestResourceStream("yourAssembly.Stored_Procedures.new_message.sql"); 

if (stm != null) 
{ 
    string sql = new StreamReader(stm).ReadToEnd(); 
    // now you have the SQL statements which you can execute 
    context.Database.ExecuteSqlCommand(sql); 
} 

Vous pouvez utiliser ce pour déterminer le nom des ressources à partir de Seed() si nécessaire:

Assembly asy = Assembly.GetExecutingAssembly(); 
string[] names = asy.GetManifestResourceNames(); 
throw new Exception(string.Join("", names));