编程语言
首页 > 编程语言> > c#-BLToolkit中的字段映射到类类型的属性

c#-BLToolkit中的字段映射到类类型的属性

作者:互联网

我的表架构(节选)

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),我不想创建它的实例.

那应该怎么做呢?

解决方法:

工作方案

I’m really starting to hate BLToolkit due to very limited documentation and community support or lack thereof (at least in English).

我只是测试了可能与此相关的各种属性,实际上我已经使它起作用了.

如果希望嵌套对象按预期工作,则必须使用其他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; }
    }
}

所有未定义值的规则都为空,其他则被实例化.

标签:mapping,bltoolkit,c,tsql
来源: https://codeday.me/bug/20191102/1992857.html