我正在使用VS 2012附带的POCO t4模板生成器。我做了一些更改以包含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对象层次结构中查找主键的方法。它暴露了属性,但该属性没有任何说法它是主键。
任何帮助表示感谢。
答案 0 :(得分:17)
万一有人试图在迁移RIA服务时尝试这样做,我在VS2013中使用标准的dbcontext模板,并在实体模板中添加了两个东西。
首先你需要:
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)#>
<#
}
}
答案 1 :(得分:9)
使用EntityType.KeyMembers属性获取主键包含的属性。
答案 2 :(得分:2)
我将其添加到TypeMapper部分,对结果感到满意:
public IEnumerable<EdmProperty> GetPrimaryKeyProperties(EntityType type)
{
return type.KeyMembers.Select(s => (EdmProperty)s);
}