Как указать составные отношения в коде EF-first, которые не отображаются на PK - PullRequest
0 голосов
/ 07 февраля 2012

Я спрашивал это давным-давно , но плохо сформулировал вопрос.

Я пытаюсь указать связь между двумя классами, которая не является простым отображением FK - это уже существующая база данных, а не то, что я буду генерировать из EF.

Итак, упрощенный вид на 2 объекта:

public class WidgetDetails
{

    [Key]
    public int WidgetId { get; set; }

    public int WidgetNumber {get; set;}

    // Some other props here..

    [ForeignKey("WidgetId,WidgetNumber")]
    public virtual WidgetProps WidgetProps { get; set; }


}

public class WidgetProps
{
    [Key]
    public int WidgetPropId { get; set; }

    [Key, Column(Order = 0)]
    public int WidgetId { get; set; }

    [Key, Column(Order = 1)]
    public int WidgetNumber { get; set; }

    // Some props here...
}

Ключевым моментом здесь является то, что WidgetProps уже имеет свой собственный ПК. НО - поскольку я хочу иметь возможность указать, что WidgetProps связаны с WidgetDetails, используя составные WidgetId и WidgetNumber, я пытаюсь указать это в своем атрибуте ForeignKey.

ОДНАКО, это будет работать, только если я удалю атрибут [KEY] из WidgetProps.WidgetPropId - потому что в EF отношения отображаются с помощью ключей.

То, что я хочу сказать EF, это " Эй, это столбец PK, но это отношение не использует его, оно основано на этих 2 столбцах ".

Возможно ли это?

Надеюсь, это имеет смысл!

1 Ответ

2 голосов
/ 07 февраля 2012

Это невозможно. EF может создавать только отношения, которые следуют правилам базы данных. FK на зависимой стороне должен содержать все части PK на главной стороне.

Общее правило: Свободный API EF не может определить какие-либо отношения, которые вы не можете определить в базе данных, используя отношения PK, FK.

...