多对一映射不允许属性
本文关键字:属性 不允许 映射 多对一 | 更新日期: 2023-09-27 18:01:35
一定是什么简单的东西,我找不到。
假设一个企业提供多种服务。一方面是业务,ServiceOffers作为查找表,另一方面是用于关联的BusinessServiceOffers。当我像下面这样添加多对一映射时,sqlite提供程序(在单元测试时)抛出了一个参数超出范围的异常,这是可以理解的,因为在Property和ManyToOne中都有重复的引用。
Property(x => x.ServiceOfferingId);
ManyToOne
(
x => x.ServiceOffering,
x =>
{
x.Fetch(FetchKind.Select);
x.Lazy(LazyRelation.Proxy);
x.Column("ServiceOfferingId");
x.ForeignKey("FK_BusinessServiceOffering_ServiceOfferingId");
}
);
移除属性修复了异常问题,但测试一直失败。查看插入的sql,我看到为ServiceOfferingId插入'null',而不是分配int值,如:
INSERT
INTO
BusinessServiceOffering
(BusinessId, IsEnabled, CreatedDate, CreatedByLoginId, ModifiedDate, ModifiedByLoginId, ServiceOfferingId, BusinessServiceOfferingId)
VALUES
(@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7);
@p0 = 200 [Type: Int32 (0)], @p1 = True [Type: Boolean (0)],
@p2 = 2/28/2013 6:11:25 PM [Type: DateTime (0)],
@p3 = 20 [Type: Int32 (0)], @p4 = 2/28/2013 6:11:25 PM [Type: DateTime (0)],
@p5 = 30 [Type: Int32 (0)], @p6 = **NULL** [Type: Int32 (0)], --->
@p7 = 5 [Type: Int32 (0)]
我试着在"one"的一边加一个袋子,但似乎没有任何区别。
我错过了什么?请注意,我对sql server进行了集成测试,无论是否使用该属性都可以正常运行。但是,使用sql server进行的简单Read测试无法为删除属性的字段返回任何数据。
似乎我需要正确地映射,或者它是一个sqlite特性。
请帮。
好的。我自己想出了这个问题,并为其他人发布了一个答案,如果他们遇到同样的问题。
- 作为空插入的字段首先不应该在POCO中。如果需要,可以通过子/嵌套对象访问它们,并且关系映射正确。
- 在sqlite中插入数据遵循对象引用规则。例如,在父子关系中,其中child持有parent的键引用,而parent有一列子节点,首先创建并保存parent,然后是child。在这种情况下,映射是parent中的一个包/一组子。还有其他情况,我稍后会更新。