使用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有可能做到这一点吗?或者我必须修改源代码才能做到这一点?
发布于 2012-07-24 19:23:19
是的,这是可能的。
以下是我们项目中的代码:
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应用于您的抽象方法,以确保即使有人重命名它们,也不会发生任何不好的事情。但我个人讨厌那些神奇的琴弦。
https://stackoverflow.com/questions/11365659
复制相似问题