如何将参数传递给DbMigration.Sql()方法

17
使用Entity Framework迁移时,DbMigration基类有一个接受匿名对象参数的Sql方法。我真的搞不懂如何使用它。
        Sql(@"
                UPDATE dbo.SlideSets 
                SET Name = @Name, 
            ", false, new {
                Name = "Foo"
            }
        );

错误的结果

System.Data.SqlClient.SqlException (0x80131904): Must declare the scalar variable "@Name"

这个语句的正确语法是什么?

2个回答

9

在这种情况下,MSSQL的标准生成器对匿名对象不起作用。您需要直接将参数放入命令中。或者,您可以衍生自己的生成器并处理它。


2
你的意思是什么?该参数的文档明确指定类似 new { SampleArgument = "MyValue" } 的输入是预期的。我猜测 SQL 字符串中的 @Name 部分是错误的。那这不是正确的假设吗?那文档在说什么呢? - George Mauer
参数是从顶级类继承的。它可以是任何东西。每个操作都可以有不同的内容,SQL生成器本身也负责以某种方式处理它。 - cincura.net
参数继承自哪里对程序有何影响?这个问题是关于 SQL 字符串应该采用什么格式才能正常工作的。 - George Mauer
您可以在用户反馈中为Parameterized DbMigration.Sql argument投票支持。 - Jeremy Cook

9

1
我认为你在假设“使用匿名对象传递参数化查询参数”的时候是错误的。那不是它存在的原因。 - cincura.net

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接