属性 先映射的 Dapper 多映射集
Dapper multi mapping set which property is mapped first
我有 2 个 classes 实体和实例。实例 class 有一个实体对象和一个属性列表,如下所示:
public class Instance
{
public Instance()
{
AttributeList = new ObservableCollection<AttributeClass>();
}
public int Id { get; set; }
public string Name { get; set; }
public string Attributes
{
get => _attributes;
set
{
_attributes = value;
JsonConvert.PopulateObject(Attributes, AttributeList);
}
}
public Entity Entity
{
get => _entity ?? (_entity = new Entity());
set
{
_entity = value;
for (int i = _attributeList.Count - 1; i >= 0; i--)
{
_attributeList.RemoveAt(i);
}
foreach (Entity.AttributesDescribeClass attributeDescribe in _entity.Attributes)
{
_attributeList.Add(new AttributeClass() { AttributesDescribe = attributeDescribe });
}
}
}
public ObservableCollection<AttributeClass> AttributeList
{
get
{
return _attributeList;
}
set
{
_attributeList = value;
_attributes=JsonConvert.SerializeObject(AttributeList);
}
}
public class AttributeClass
{
[JsonIgnore]
public Entity.AttributesDescribeClass AttributesDescribe { get; set; }
public string Name
{
get => AttributesDescribe.Name;
}
public object Value { get; set; }
[JsonIgnore]
public ObservableCollection<InstanceValidator> Validators { get; set; }
public AttributeClass()
{
Validators = new ObservableCollection<InstanceValidator>();
}
}
}
这个class唯一可以工作的是总是先设置实体,这样它就会创建属性列表,之后,我们设置属性并填充属性列表对象。但似乎 Attributes 总是在 Entity 之前设置,所以这个 class 不起作用。有什么方法可以指示 Dapper.NET 在属性之前设置实体?
Dapper 处理来自 reader、left-to-right 的列。所以:"whichever field comes back from the database first".
我有 2 个 classes 实体和实例。实例 class 有一个实体对象和一个属性列表,如下所示:
public class Instance
{
public Instance()
{
AttributeList = new ObservableCollection<AttributeClass>();
}
public int Id { get; set; }
public string Name { get; set; }
public string Attributes
{
get => _attributes;
set
{
_attributes = value;
JsonConvert.PopulateObject(Attributes, AttributeList);
}
}
public Entity Entity
{
get => _entity ?? (_entity = new Entity());
set
{
_entity = value;
for (int i = _attributeList.Count - 1; i >= 0; i--)
{
_attributeList.RemoveAt(i);
}
foreach (Entity.AttributesDescribeClass attributeDescribe in _entity.Attributes)
{
_attributeList.Add(new AttributeClass() { AttributesDescribe = attributeDescribe });
}
}
}
public ObservableCollection<AttributeClass> AttributeList
{
get
{
return _attributeList;
}
set
{
_attributeList = value;
_attributes=JsonConvert.SerializeObject(AttributeList);
}
}
public class AttributeClass
{
[JsonIgnore]
public Entity.AttributesDescribeClass AttributesDescribe { get; set; }
public string Name
{
get => AttributesDescribe.Name;
}
public object Value { get; set; }
[JsonIgnore]
public ObservableCollection<InstanceValidator> Validators { get; set; }
public AttributeClass()
{
Validators = new ObservableCollection<InstanceValidator>();
}
}
}
这个class唯一可以工作的是总是先设置实体,这样它就会创建属性列表,之后,我们设置属性并填充属性列表对象。但似乎 Attributes 总是在 Entity 之前设置,所以这个 class 不起作用。有什么方法可以指示 Dapper.NET 在属性之前设置实体?
Dapper 处理来自 reader、left-to-right 的列。所以:"whichever field comes back from the database first".