0

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 ですぐに使用できますか? または、これを実現するにはソースを変更する必要がありますか?

4

1 に答える 1

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

 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 を抽象メソッドに適用して、誰かがそれらの名前を変更した場合に悪いことが起こらないようにすることができます。でも、個人的にはあの魔法の糸が嫌いです。

于 2012-07-24T11:23:19.090 に答える