映射同一类中的两个引用,但引用类具有复合键

2024-04-28

我有以下数据库表(为了清楚起见,这些表已缩写):

CREATE TABLE [dbo].[prod_uom](
    [prod_id] [dbo].[uid] NOT NULL,       --Primary key
    [uom_type] [numeric](9, 0) NOT NULL,  --Primary Key
)

CREATE TABLE [dbo].[order_line](
    [order_line_id] [dbo].[uid] NOT NULL,  --Primary key
    [prod_id] [dbo].[uid] NOT NULL,        --Foreign key
    [uom_type_requested] [numeric](9, 0) NOT NULL, --Foreign key
    [uom_specified] [numeric](9, 0) NOT NULL        --Foreign key
)

我遇到问题的实体如下所示(缩写):

public class OrderLine
{
     public virtual Guid OrderLineId { get; private set; }
     public virtual ProductUom UomRequested { get; set; }
     public virtual ProductUom UomSpecified { get; set; }
}

public class ProductUom
{
    public virtual Guid ProductId { get; private set; }
    public virtual decimal UomType { get; set; }
}

基本上我有 2 个参考文献PROD_UOM我里面的桌子订单行班级。我第一次尝试绘制此图如下:

public OrderLineMap()
{
    Table("ORDER_LINE");
    Id(x => x.OrderLineId, "ORDER_LINE_ID");

    References(x => x.UomSpecified)
        .Columns(new string[] { "PROD_ID", "UOM_SPECIFIED" });

    References(x => x.UomRequested)
        .Columns(new string[] { "PROD_ID", "UOM_TYPE_REQUESTED" });
}

此映射会出现可怕的错误(PROD_ID 被引用两次):

System.IndexOutOfRangeException: Invalid index 17 for this SqlParameterCollection with Count=17. 

有没有一种简单的方法来映射这种关系?


我相当确定您不能将同一列映射两次,因此我的建议是将 ORDER_LINE 中的 PROD_ID 列拆分为两个:PROD_ID_SPEC 和 PROD_ID_REQ。

还有其他一些选择,但这就是我建议的选择,因为它们可能比这更不优雅。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

映射同一类中的两个引用,但引用类具有复合键 的相关文章

随机推荐