Pro*_*ofK 12 c# sql-server entity-framework ef-migrations entity-framework-6
MSDN说这个方法"添加一个执行SQL资源文件的操作".它的签名是:
protected internal void SqlResource(
string sqlResource,
Assembly resourceAssembly = null,
bool suppressTransaction = false,
object anonymousArguments = null
)
Run Code Online (Sandbox Code Playgroud)
并且该sqlResource参数被描述为The manifest resource name of the SQL resource file to be executed."SQL资源文件"与普通.resx资源文件相同,如果是,它可以包含许多文件,那么如何指定资源文件的名称以及该资源中的文件,在这一个参数?或者是"SQL资源文件"是一种不同类型的文件,只包含一个SQL脚本,我只是为sqlResource参数传递该文件的名称?
Evk*_*Evk 13
由于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
});
}
}
Run Code Online (Sandbox Code Playgroud)
你可以在这里看到,这个方法首先读取清单资源的名称sqlResource从组件resourceAssembly(如空-它使用调用组件).然后将来自此资源的文本视为sql,并SqlOperation添加regular 和它提供的参数.
有许多方法可以将任意文件作为mantifest资源嵌入到程序集中.这种特殊情况的简单方法是使用构建操作"嵌入式资源"将此文件添加到项目中.所以你有一个名为"CreateTables.sql"的sql文件.右键单击Visual Studio项目,单击"添加>现有项",选择"CreateTables.sql"文件,然后在Visual Studio项目中右键单击它,并选择"构建操作"作为"嵌入式资源".这将导致带有名称的清单资源DefaultNamespaceOfYourAssembly.Folder.SubFolder.CreateTables.sql(如果您将其放在根目录中,没有文件夹,那么显然会跳过Folder.SubFolder部分),然后您可以像sqlResource上面的方法一样使用它.
至于你提到的resx文件 - 该文件本身是清单资源,但它不能在这里使用,因为你不能只使用它的一部分(因此某些资源与给定的密钥) - 你只能将它作为一个整体使用,但是它是xml文件而不是sql.
| 归档时间: |
|
| 查看次数: |
1347 次 |
| 最近记录: |