2012-07-06 60 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