Поиск свойства - это первичный ключ в POCO Template t4 generator

Я использую генератор шаблонов POCO t4, который поставляется с VS 2012. Я внес несколько изменений, чтобы включить Entity.Name, но я не могу определить первичный ключ.

public string EntityClassOpening(EntityType entity)
{
    return string.Format(
        CultureInfo.InvariantCulture,
        "{0} {1}partial class {2}{3}<{4},{5}>{6}",
        Accessibility.ForType(entity),
        _code.SpaceAfter(_code.AbstractOption(entity)),
        _code.Escape(entity),
        ": EntityBase",
        entity.Name,
        entity.Name,
        _code.StringBefore(" ", _typeMapper.GetTypeName(entity.BaseType)));
}

Я не нашел способ найти первичный ключ из иерархии объектов EntityType. Он предоставляет свойства, но свойство не имеет права говорить, что это первичный ключ.

Любая помощь была оценена.

Ответ 1

На всякий случай, когда кто-то пытается это сделать при переносе данных служб RIA, я использую стандартный шаблон dbcontext в VS2013 и добавил две вещи к шаблону сущностей.

сначала вам нужно:

using System.ComponentModel.DataAnnotations;

Я положил его под блок // ---- рядом с вершиной.

Затем я изменил бит кода, который выглядит так. Просто найдите имя. Мое изменение - ef.IsKey... и добавление атрибута Key().

    var simpleProperties = typeMapper.GetSimpleProperties(entity);
    if (simpleProperties.Any())
    {
        foreach (var edmProperty in simpleProperties)
        {
#>
 <#if (ef.IsKey(edmProperty))
   {#>      [Key()]
   <#}#>
    <#=codeStringGenerator.Property(edmProperty)#>
<#
        }
    }

Ответ 2

Используйте свойство EntityType.KeyMembers, чтобы получить свойства, с которыми состоит первичный ключ.