我目前有以下关系:ProductUom -> ProductImage
它们都具有相同的主键:PROD_ID
和UOM_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
,这会导致外键违规。我发誓这是我曾经使用的映射工作,但现在还没有。
我需要ProductImage
为ProductImage
(多对一),因为此处的关系是可选的,我希望能够延迟加载产品图片。如果我使用Reference
(一对一)映射,插件可以正常工作但我执行此操作时无法延迟加载,并且查询HasOne
似乎会导致问题。
答案 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);
虽然不能在这里测试,我正在手机上写作