多对一映射不允许属性

时间:2013-03-01 02:34:45

标签: c# orm nhibernate-mapping

在某些我无法理解的地方,这一定是简单的。

假设一家企业提供多种服务。业务一方面,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)]

我尝试在“一”侧添加一个包,但似乎没有任何区别。

我错过了什么?请注意,我对sql server进行了集成测试,无论是否有属性都可以正常运行。但是,使用sql server进行简单的Read测试无法为那些删除了属性的字段返回任何数据。

好像我需要正确映射,或者它是一个sqlite特质。

请帮忙。

1 个答案:

答案 0 :(得分:0)

确定。如果他们遇到同样的问题,我自己想出这个并为其他人发布答案。

  1. 首先插入为null的字段不应该在POCO中。如果需要,可以通过子/嵌套对象访问它们,并且可以正确映射关系。
  2. 将数据插入到sqlite中遵循对象引用规则。例如,在父子关系中,子项拥有对父项的键引用,父项具有子项列表,请先创建父项,然后保存父项。在这种情况下,映射是父母中的一个包/一组子项。还有其他情况我稍后会更新。