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 из коробки? Или я должен был бы изменить источник, чтобы достигнуть этого?
1 ответ
Да, это возможно.
Вот код из нашего проекта:
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; }
}
Пока свойства имеют те же имена, что и параметры в хранимой процедуре (без учета регистра), все вещи будут работать правильно. Конечно, вы можете применять атрибуты MapField к свойствам модели и SprocName к своему абстрактному методу, чтобы гарантировать, что если кто-то переименует их, ничего плохого не произойдет. Но я лично ненавижу эти волшебные струны.