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
)。
那怎么办呢?
答案 0 :(得分: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,其他规则都是实例化的。
答案 1 :(得分:0)
BLToolkit不会创建MyEntityRule的实例你必须自己做..