谢谢,nemesv,您评论中的提示!我缺少的是在设置存储过程参数时指定的类型,即“Int”和“String”:
c => new
{
ItemID = c.Int(),
ItemName = c.String(),
//...
}
...实际上是方法,并且每个方法都在类上System.Data.Entity.Migrations.Builders.ParameterBuilder http://msdn.microsoft.com/en-us/library/system.data.entity.migrations.builders.parameterbuilder%28v=vs.113%29.aspx-- 具有一组可选参数,这些参数会影响从迁移脚本生成的 SQL。
如果是smallmoney
-type 存储过程参数,我最终使用:
ItemCost = c.Decimal(precision: 10, scale: 4, storeType: "smallmoney")
precision:10和scale:4的值来自MSDN文章金钱和小钱 (Transact-SQL) http://msdn.microsoft.com/en-us/library/ms179882.aspx,它指定smallmoney
精度(总位数)为 10,小数位数(小数点右侧的位数)为 4(对于 SQL Server 2008 及更高版本)。
所以我完整的迁移代码是:
public override void Up()
{
this.AlterStoredProcedure("dbo.EditItem", c => new
{
ItemID = c.Int(),
ItemName = c.String(),
ItemCost = c.Decimal(precision: 10, scale: 4, storeType: "smallmoney")
},
@" (New sproc body SQL goes here) ");
}
产生的 SQL:
ALTER PROCEDURE [dbo].[EditItem]
@ItemID [int],
@ItemName [nvarchar](max),
@ItemCost [smallmoney]
AS
BEGIN
(New sproc body SQL goes here)
END