Композитные ключи в коде EF 4.2 First - PullRequest
0 голосов
/ 16 ноября 2011

У меня есть следующие классы, и я использую код EF 4.2 сначала

public class PartAttribute
{
    public Part Part { get; set; }

    public PartAttributeType PartAttributeType { get; set; }

    [Timestamp]
    public byte[] Time { get; set; }

    [Required]
    public string Value { get; set; }
}

public class Part
{
    public Guid Id { get; set; }

    [Required]
    public PartType PartType { get; set; }

    [Required]
    public string SerialNumber { get; set; }

    public string Description { get; set; }

    public ICollection<Team> SelectedTeams { get; set; }
}

public class PartAttributeType
{
    public Guid Id { get; set; }

    [Required]
    public PartType PartType { get; set; }

    [Required]
    public string Name { get; set; }

    public string Description { get; set; }
}

Когда я строю свою модель, она создает три таблицы и отношения между таблицами, как я хотел бы / ожидаю их.Я пытаюсь создать составной ключ в таблице PartAttribute между Part, PartAttributeType и временем, и я не могу понять это.Когда я пытаюсь добавить modelBuilder.Entity<PartAttribute>().HasKey(c => new { c.Part, c.PartAttributeType, c.Time });
, я получаю сообщение о том, что Part не является скалярным типом (а это не так).

1 Ответ

1 голос
/ 16 ноября 2011

Вам необходимо ввести свойства внешнего ключа, которые могут одновременно действовать как первичные ключи:

public class PartAttribute
{
    public Guid PartId { get; set; }
    public Guid PartAttributeTypeId { get; set; }

    public Part Part { get; set; }

    public PartAttributeType PartAttributeType { get; set; }

    [Timestamp]
    public byte[] Time { get; set; }

    [Required]
    public string Value { get; set; }
}

Тогда ваше отображение:

modelBuilder.Entity<PartAttribute>()
    .HasKey(c => new { c.PartId, c.PartAttributeTypeId, c.Time });

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

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