集合值对象映射错误
collection of value object mapping error
我正在尝试在 fluent-Nhibernate 和 C# 中映射对象字段,该模型包含一个具有引用字段的实体ValueObject
,
这是实体class
public class QueryLeaf : Entity
{
public QueryLeaf()
{
FilterDescriptors = new List<FilterDescriptor>();
}
public virtual int Id { get; set; }
public virtual List<FilterDescriptor> FilterDescriptors { get; set; }
}
这是值对象class
[Serializable]
public class FilterDescriptor : ValueObject
{
public FilterOperator FilterOperator { get; set; }//this is an enum value
public object Value { get; set; }
}
这是映射 class
public sealed class QueryLeafMap : ClassMap<QueryLeaf>
{
public QueryLeafMap()
{
Id(x => x.Id);
HasMany(x => x.FilterDescriptors).Component(com =>
{
com.Map(y => y.FilterOperator);
com.Map(y => y.Value);
});
}
}
当 运行 上面的代码编译器在 global.asax
页面停止并给我这个错误
collection element mapping has wrong number of columns
QueryLeaf.FilterDescriptors type: component[FilterOperator,Value]
一般来说,我们可以将 Reference 类型映射到 .References()
,将 Value 类型映射到 .Map()
。 object
肯定是引用类型,并且会导致此类问题。
其实我们无法映射object
,太笼统了。我们应该创建一些自定义类型 (class) 或将一般值映射到其序列化,或者,如果可能, 到字符串值 。
所以这个小改动将使上面的代码工作:
[Serializable]
public class FilterDescriptor : ValueObject
{
public FilterOperator FilterOperator { get; set; }//this is an enum value
// cannot map object
// public object Value { get; set; }
public string StringValue { get; set; }
// and we can do some magic later
public object Value { get { ... use the StringValue } ... }
}
因为我们使用了不同的名称,所以这应该是新的映射
HasMany(x => x.FilterDescriptors).Component(com =>
{
com.Map(y => y.FilterOperator);
//com.Map(y => y.Value);
com.Map(y => y.StringValue);
});
我正在尝试在 fluent-Nhibernate 和 C# 中映射对象字段,该模型包含一个具有引用字段的实体ValueObject
,
这是实体class
public class QueryLeaf : Entity
{
public QueryLeaf()
{
FilterDescriptors = new List<FilterDescriptor>();
}
public virtual int Id { get; set; }
public virtual List<FilterDescriptor> FilterDescriptors { get; set; }
}
这是值对象class
[Serializable]
public class FilterDescriptor : ValueObject
{
public FilterOperator FilterOperator { get; set; }//this is an enum value
public object Value { get; set; }
}
这是映射 class
public sealed class QueryLeafMap : ClassMap<QueryLeaf>
{
public QueryLeafMap()
{
Id(x => x.Id);
HasMany(x => x.FilterDescriptors).Component(com =>
{
com.Map(y => y.FilterOperator);
com.Map(y => y.Value);
});
}
}
当 运行 上面的代码编译器在 global.asax
页面停止并给我这个错误
collection element mapping has wrong number of columns QueryLeaf.FilterDescriptors type: component[FilterOperator,Value]
一般来说,我们可以将 Reference 类型映射到 .References()
,将 Value 类型映射到 .Map()
。 object
肯定是引用类型,并且会导致此类问题。
其实我们无法映射object
,太笼统了。我们应该创建一些自定义类型 (class) 或将一般值映射到其序列化,或者,如果可能, 到字符串值 。
所以这个小改动将使上面的代码工作:
[Serializable]
public class FilterDescriptor : ValueObject
{
public FilterOperator FilterOperator { get; set; }//this is an enum value
// cannot map object
// public object Value { get; set; }
public string StringValue { get; set; }
// and we can do some magic later
public object Value { get { ... use the StringValue } ... }
}
因为我们使用了不同的名称,所以这应该是新的映射
HasMany(x => x.FilterDescriptors).Component(com =>
{
com.Map(y => y.FilterOperator);
//com.Map(y => y.Value);
com.Map(y => y.StringValue);
});