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 テンプレートを使用し、entities テンプレートに 2 つのことを追加しました。

最初に必要なもの:

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 に答える