2012-12-27 47 views
10

我正在使用VS 2012自帶的POCO t4模板生成器。我對Entity.Name做了一些更改,但我無法弄清楚首要的關鍵。查找屬性是POCO模板中的主鍵t4生成器

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對象層次結構中找到主鍵的方法。它公開屬性,但該屬性沒有任何可以說它是主鍵。

任何幫助表示讚賞。

回答

13

爲了防止任何人在遷移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)#> 
<# 
     } 
    } 
+0

我發現在沒有定義鍵的表上,模板在多列(不是全部)上返回IsKey。我需要看看那裏發生了什麼,但有沒有人有任何見解? –

9

使用EntityType.KeyMembers屬性獲取主鍵所包含的屬性。

+1

這有幫助。我結束了使用EntityType.KeyProperties我的用法。謝謝! – TravisWhidden

+0

@TravisWhidden你能分享你使用EntityType.KeyProperties的代碼嗎?謝謝! –