2012-07-06 84 views
0

使用BLToolkit,從存儲過程輸出映射到對象非常容易,但是可以以其他方式完成嗎?從對象到一個存儲過程的輸入,使得每一個對象的屬性變成一個參數BLToolkit對象作爲參數

我希望能夠做這樣的事情:

[SprocName("sp_name")] 
public abstract void InsertViaSproc(int param1, int param2, 
            SomeObject restOfParams); 

public class SomeObject 
{ 
    [MapField("param3")] int param3; 
    [MapField("param4")] string param4; 
} 

與存儲過程

CREATE PROCEDURE sp_name(
    @param1 int, 
    @param2 int, 
    @param3 int, 
    @param4 varchar(50)) 
AS 
--The rest 

這可能與BLToolkit開箱?或者我需要修改源代碼來實現這個目標?

回答

0

是的,這是可能的。

下面是我們的項目代碼:

public abstract void Save(long userId, [Direction.InputOutput("id")] Email email); 

    protected override string GetDefaultSpName(string typeName, string actionName) 
    { 
     return "fspEmail" + actionName; 
    } 

和T-SQL ...在我的情況,甚至沒有一個MapField可

CREATE PROCEDURE [fspEmailSave] 
    @userId BIGINT, 
    @name NVARCHAR(250), 
    @subject NVARCHAR(255), 
    @from NVARCHAR(255), 
    @replyTo NVARCHAR(255), 
    @forward NVARCHAR(255), 
    @description NVARCHAR(300), 
    @id BIGINT OUT 
... 

電子郵件模型屬性:

public class Email 
{ 
    public long Id { get; set; } 

    public string Name { get; set; }   

    public string Description { get; set; } 

    public string Subject { get; set; } 

    public string From { get; set; }   

    public string ReplyTo { get; set; } 

    public string Forward { get; set; } 

    public string HtmlContent { get; set; } 

    public string TextContent { get; set; } 
} 

只要屬性在存儲過程中具有與params相同的名稱(不區分大小寫),所有內容都將正常工作。當然,您可以將MapField屬性應用於模型屬性,並將SprocName應用於抽象方法,以確保如果有人將其重命名,則不會發生任何錯誤。但我個人討厭這些魔術弦。

+0

我希望這樣的事情是可能的!你能不能分享你的電子郵件模型及其所有的映射? – AndyBursh 2012-07-24 15:10:18