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,这可能吗?还是我必须修改源代码才能实现这一点?

是的,这是可能的。

这是我们项目的代码:

 public abstract void Save(long userId, [Direction.InputOutput("id")] Email email);
    protected override string GetDefaultSpName(string typeName, string actionName)
    {
        return "fspEmail" + actionName;
    }

和T-SQL。。。

 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
...

在我的案例中,电子邮件模型甚至没有MapField属性:

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应用于抽象方法,以确保如果有人重命名了它们,不会发生任何错误。但我个人讨厌那些神奇的琴弦。

最新更新