首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BLToolkit对象作为参数

BLToolkit对象作为参数
EN

Stack Overflow用户
提问于 2012-07-06 23:54:23
回答 1查看 700关注 0票数 0

使用BLToolkit,从存储过程输出到对象的映射非常容易,但是否可以通过其他方式来完成呢?从对象转到存储过程输入,以便每个对象属性都成为参数

我希望能够做这样的事情:

代码语言:javascript
复制
[SprocName("sp_name")]
public abstract void InsertViaSproc(int param1, int param2, 
                                    SomeObject restOfParams);

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

使用存储过程

代码语言:javascript
复制
CREATE PROCEDURE sp_name(
    @param1 int,
    @param2 int,
    @param3 int,
    @param4 varchar(50))
AS
--The rest

开箱即用的BLToolkit有可能做到这一点吗?或者我必须修改源代码才能做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2012-07-24 19:23:19

是的,这是可能的。

以下是我们项目中的代码:

代码语言:javascript
复制
 public abstract void Save(long userId, [Direction.InputOutput("id")] Email email);

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

和T-SQL...

代码语言:javascript
复制
 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属性:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11365659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档