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在类级别设置设置(如上代码所示),但我的规则始终为空。假设问题的一部分是这个内部类属性必须首先实例化才能分配给,因为所有 BLToolkit 示例都使用不可为空的内部对象。但在我的情况下,我不想创建它的实例(如果它应该是) 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; }
    }
}

所有没有定义值的规则都是空的,其他的都是实例化的。

于 2011-05-16T11:16:40.810 回答
0

BLToolkit 不会创建 MyEntityRule 的实例你必须自己做..

于 2013-05-19T20:14:24.190 回答