11

我正在使用 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 对象层次结构中找到主键的方法。它公开属性,但该属性没有任何说明它是主键的信息。

任何帮助表示赞赏。

4

3 回答 3

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)#>
<#
        }
    }
于 2014-02-08T17:11:08.883 回答
9

使用EntityType.KeyMembers属性获取主键包含的属性。

于 2013-01-15T21:05:55.380 回答
2

我将此添加到 TypeMapper 部分,对结果感到满意:

public IEnumerable<EdmProperty> GetPrimaryKeyProperties(EntityType type)
{
    return type.KeyMembers.Select(s => (EdmProperty)s);
}
于 2020-01-31T06:57:01.613 回答