3

私のテーブルスキーマ(抜粋)

create table dbo.MyEntity
(
    MyEntityID int identity not null
        primary key,
    Name nvarchar(50) not null
        unique,
    Description nvarchar(500) null,
    -- these two are optional fields
    MaxCount int null,
    MinSpace int null
)

エンティティクラス

[MapField("MaxCount", "Rule.MaxCount")]
[MapField("MinSpace", "Rule.MinSpace")]
public class MyEntity
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string Description { get; set; }

    // when values are not null this property should have an instance
    public MyEntityRule Rule { get; set; }

    public bool HasRule
    {
        get { return this.Rule != null; }
    }
}

public class MyEntityRule
{
    public int MaxCount { get; set; }

    public int MinSpace { get; set; }
}

問題?

私のクラスへのフィールドのマッピングが問題です。データテーブル(上部)から取得したフラットな結果セットから内部クラスのプロパティを直接マップしたいと思います。

MapFieldAttribute(上のコードに見られるように)クラスレベルで設定を設定しましたが、ルールは常にnullです。問題の一部は、この内部クラスプロパティを最初にインスタンス化して割り当てる必要があることです。これは、すべてのBLToolkitの例でnull許容でない内部オブジェクトが使用されているためです。しかし、私の場合は、必要に応じてインスタンスを作成したくありませんnull(ほとんどの場合は作成されますnull)。

では、これはどのように行う必要がありますか?

4

2 に答える 2

4

実用的なソリューション

ドキュメントとコミュニティのサポートが非常に限られているか、(少なくとも英語では)不足しているため、私はBLToolkitを本当に嫌いになり始めています。

私はこれにいくらか関連しているかもしれないさまざまな属性をテストしていて、実際にそれを機能させました。

ネストされたオブジェクトを期待どおりに機能させる場合は、追加のを使用する必要がありますNoInstanceAttribute。また、これらのフィールドマッピング属性を以前と同じようにクラスに保持する必要があります。結果として機能するコードは次のとおりです。

[MapField("MaxCount", "Rule.MaxCount")]
[MapField("MinSpace", "Rule.MinSpace")]
public class MyEntity
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string Description { get; set; }

    [NoInstance] // this will make it work
    public MyEntityRule Rule { get; set; }

    public bool HasRule
    {
        get { return this.Rule != null; }
    }
}

値を定義しないすべてのルールはnullであり、他のルールはインスタンス化されます。

于 2011-05-16T11:16:40.810 に答える
0

BLToolkit は MyEntityRule のインスタンスを作成しません。自分で作成する必要があります。

于 2013-05-19T20:14:24.190 に答える