Entity Framework, имеющий первичный ключ, который является ссылкой на сущность с составным первичным ключом - PullRequest
2 голосов
/ 11 октября 2011

Итак, у меня есть класс с составным первичным ключом:

public class Field
{
    [Key, Column(Order=0)]
    [ForeignKey("Store")]
    public int StoreID { get; set; }
    public Store Store { get; set; }

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


    public List<Template> Templates { get; set; }
}

... и другой, который ссылается на него

public class Mapping
{
    public Field Field { get; set; }

    [ForeignKey("Template")]
    public int TemplateID { get; set; }
    public Template Template { get; set; }
}

Это работает хорошо, за исключением того, что отсутствует сопоставлениеего первичный ключ, потому что я не знаю, как это сделать.Я хочу, чтобы класс Mapping имел составной первичный ключ, сформированный из Field и Template.Сложность для меня заключается в том, что у класса Field также есть составной ключ.

1 Ответ

3 голосов
/ 11 октября 2011

Вам нужно что-то вроде этого:

public class Mapping
{
    [Key, ForeignKey("Field"), Column(Order=0)]
    public int StoreID { get; set; }

    [Key, ForeignKey("Field"), Column(Order=1)]
    public int ID { get; set; }

    [Key, ForeignKey("Template"), Column(Order=2)]
    public int TemplateID { get; set; }

    public Field Field { get; set; }
    public Template Template { get; set; }
}

Для атрибута ForeignKey вы можете указать порядок составного ключа, как для атрибута Key. В качестве альтернативы вы также можете поместить атрибут ForeignKey в свойство навигации и затем указать свойства FK с разделением запятыми:

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

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

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

    [ForeignKey("StoreID, ID")]
    public Field Field { get; set; }

    [ForeignKey("TemplateID")]
    public Template Template { get; set; }
}

( Редактировать Дубликат Column атрибут неверен -> Исправлено.)

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