2014-12-29 4 views
2

DbMigration.AlterStoredProcedure 메서드를 사용하여 저장 프로 시저 정의를 변경할 때 Entity Framework 6.1에서 C# 코드 기반 마이그레이션 (System.Data.Entity.Migrations.DbMigration 사용)에서 저장 프로 시저 매개 변수를 추가하거나 수정하기위한 올바른 구문은 무엇입니까? smallmoney 형식 (SQL Server 2012의 경우)? 예를 들어DbMigration.AlterstoredProcedure (Entity Framework 마이그레이션) : smallmoney 유형을 나타내는 방법은 무엇입니까?

, 나는 각각 마이그레이션 유형 int, varchar의 세 가지 매개 변수를 기존 SQL Server 저장 프로 시저를 수정 방법 및 smallmoney있는 경우 :

public partial class MyCustomMigration : DbMigration 
{ 
    public override void Up() 
    { 
     this.AlterStoredProcedure("dbo.EditItem", c => new 
     { 
      ItemID = c.Int(), 
      ItemName = c.String(), 
      ItemCost = /* What goes here to represent the smallmoney SQL Server type? */ 
     }, 
     @" (New sproc body SQL goes here) "); 
    } 

    // ... 
} 
+1

당신은'ItemCost = c.Decimal (storeType에 "smallmoney")을 시도 할 수 있습니다 : SQL을 생산

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) "); } 

'... 실제로 어떤 방법 으로든 여기에서 사용할 수 있습니다. 'storeType : "smallmoney"' – nemesv

+0

을 명시 적으로 지정할 때까지'c.Int()'또는'c.Double()'또는 무엇이든 문자열 변수의 길이를 지정하는 방법에 대한 관련 질문 : http://stackoverflow.com/ 질문/7341783/entity-framework-data-annotations-set-stringlength-varchar/7341920 –

답변

2

감사합니다, nemesv의 힌트를 귀하의 의견에! -에

c => new 
    { 
     ItemID = c.Int(), 
     ItemName = c.String(), 
     //... 
    } 

은 ... 실제로 방법, 그리고 그 각각의 방법 : 내가 없어진 것은 저장 프로 시저 매개 변수, 즉 "지능"과 "문자열"을 설정하는 동안의 형식이 지정되고 있다는 것입니다 클래스 System.Data.Entity.Migrations.Builders.ParameterBuilder - 이주 스크립트에서 생성 된 SQL에 영향을주는 일련의 선택적 매개 변수가 있습니다. 정밀도

ItemCost = c.Decimal(precision: 10, scale: 4, storeType: "smallmoney") 

값 : 10 배율 : 4 smallmoney가 갖는 지정 MSDN 문서 money and smallmoney (Transact-SQL)에서됩니다 smallmoney 형 프로 시저 인수의 경우

, 전 사용 끝내 정밀도 (총 자릿수) 10 및 소수 자릿수 (소수 자릿수 오른쪽) 4 (SQL Server 2008 이상)

그래서 내 전체 마이그레이션 코드가 있었다 :

ALTER PROCEDURE [dbo].[EditItem] 
    @ItemID [int], 
    @ItemName [nvarchar](max), 
    @ItemCost [smallmoney] 
AS 
BEGIN 
    (New sproc body SQL goes here) 
END