可选的多对一/引用导致插入时出现外键冲突

时间:2011-10-23 20:41:30

标签: nhibernate fluent-nhibernate

我目前有以下关系:ProductUom -> ProductImage

它们都具有相同的主键:PROD_IDUOM_TYPE

我把它们映射成这样:

public ProductUomMap()
{
    Table("PROD_UOM");

    CompositeId()
        .KeyReference(x => x.Product, "PROD_ID")
        .KeyProperty(x => x.UomType, "UOM_TYPE");

    References(x => x.Image)
        .Columns(new string[] { "PROD_ID", "UOM_TYPE" })
        .Not.Update()
        .Not.Insert()
        .NotFound.Ignore()
        .Cascade.All();
}

public ProductImageMap()
{
    Table("PROD_UOM_IMAGE");

    CompositeId()
        .KeyReference(x => x.ProductUom, new string[] {"PROD_ID", "UOM_TYPE"});

    Map(x => x.Image, "PROD_IMAGE").Length(2147483647);
}

每当我创建一个ProductUom的{​​{1}}对象时,它会先尝试插入ProductImage,这会导致外键违规。我发誓这是我曾经使用的映射工作,但现在还没有。

我需要ProductImageProductImage(多对一),因为此处的关系是可选的,我希望能够延迟加载产品图片。如果我使用Reference(一对一)映射,插件可以正常工作但我执行此操作时无法延迟加载,并且查询HasOne似乎会导致问题。

我在这里缺少什么?如何修改此映射以获得我想要的内容?

1 个答案:

答案 0 :(得分:0)

你可以使用LazyLoaded属性吗?然后你可以使用这样的东西

Join("PROD_UOM_IMAGE", join =>
{
    join.KeyColumn("PROD_ID", "UOM_TYPE");
    join.Optional();
    join.Map(x => x.Image, "PROD_IMAGE").Length(2147483647).LazyLoad();
}

另一种选择是:

Id().GeneratedBy.Foreign(x => x.ProductUom);

虽然不能在这里测试,我正在手机上写作