Отображение двух ссылок в одном и том же классе, но ссылочный класс имеет составной ключ - PullRequest
4 голосов
/ 24 августа 2011

У меня есть следующие таблицы базы данных (для ясности они сокращены):

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 внутри моего класса ORDER_LINE . Моя первая попытка картирования это была следующая:

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. 

Есть ли простой способ отобразить эти отношения?

1 Ответ

2 голосов
/ 26 августа 2011

Я вполне уверен, что вы не можете отобразить один и тот же столбец дважды, поэтому я предлагаю разделить столбец PROD_ID в ORDER_LINE на два, PROD_ID_SPEC и PROD_ID_REQ.

Есть и другие варианты, но я бы предложил их, поскольку они, вероятно, еще более не элегантны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...