Поиск свойства - это первичный ключ в 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, чтобы получить свойства, с которыми состоит первичный ключ.