Поскольку EF является открытым исходным кодом, самый простой способ, чтобы это выяснить, это посмотреть на исходный код:
protected internal void SqlResource(string sqlResource, Assembly resourceAssembly = null, bool suppressTransaction = false, object anonymousArguments = null)
{
Check.NotEmpty(sqlResource, "sqlResource");
resourceAssembly = resourceAssembly ?? Assembly.GetCallingAssembly();
if (!resourceAssembly.GetManifestResourceNames().Contains(sqlResource))
{
throw new ArgumentException(Strings.UnableToLoadEmbeddedResource(resourceAssembly.FullName, sqlResource));
}
using (var textStream = new StreamReader(resourceAssembly.GetManifestResourceStream(sqlResource)))
{
AddOperation(
new SqlOperation(textStream.ReadToEnd(), anonymousArguments)
{
SuppressTransaction = suppressTransaction
});
}
}
Вы можете увидеть здесь, что этот метод сначала читает manifest resource с именем sqlResource
от узла resourceAssembly
(если null - он использует сборку вызовов). Затем текст с этого ресурса обрабатывается как sql, и к нему добавляются регулярные SqlOperation
и параметры, которые вы предоставляете.
Существует множество способов вставки произвольного файла в качестве ресурса манифеста в вашу сборку. Легкий способ для такой конкретной ситуации - просто добавить этот файл в проект с помощью действия сборки «Встроенный ресурс». Таким образом, у вас есть файл sql с именем «CreateTables.sql». Щелкните правой кнопкой мыши на проекте Visual Studio, нажмите «Добавить> Существующий элемент», выберите файл «CreateTables.sql», затем щелкните его правой кнопкой мыши в проекте Visual Studio и выберите «Построить действие как« Встроенный ресурс ». Это приведет к ресурсу манифеста с именем DefaultNamespaceOfYourAssembly.Folder.SubFolder.CreateTables.sql
(если вы поместите его в корневой каталог, без папок, то, очевидно, пропустите часть Folder.SubFolder), которую затем вы можете использовать как sqlResource
в методе выше.
Что касается файла resx, который вы упомянули - этот файл - это ресурс манифеста, но он не может использоваться здесь, потому что вы не можете использовать только часть его (так что некоторый ресурс с данным ключом) - вы можете использовать это в целом, но это xml-файл, а не sql.
Аах, который проливает много света. Несколько лет назад я помню только тусклую память, считая, что файлы могут быть встроенными ресурсами. Помимо того, что я всегда предполагал, когда был обсужден ресурс, он был в файле .resx. – ProfK
Какой замечательный ответ. Спасибо @Evk – erkinyldz