从T4模板生成器中查找外键

时间:2014-05-06 17:19:21

标签: visual-studio-2013 entity-framework-6 t4 asp.net-4.0

我正在尝试为我的实体中的每个外键生成一个方法,以返回基于该外键的记录列表。我知道一种确定主键的方法:

foreach (var edmProperty in simpleProperties)
{
    bool isPrimaryKey = ef.IsKey(edmProperty);
    if(isPrimaryKey)
    {
       //do stuff
    }
}

有找到外键的方法吗? 我在Visual Studio 2013中使用EF 6。 感谢

2 个答案:

答案 0 :(得分:1)

不要这样做。出于多种原因:

  • 它打破了持久性的无知。 POCO不应该对数据层有任何了解。您甚至可以在没有引用EF的单独程序集中定义POCO。
  • GetByCountryID这样的方法通常是存储库方法,它们不属于实体类。
  • 静态方法不应分散在类模型上。它们是实用工具类或工厂的典型代表(有City.New()方法可能是有意义的。
  • 您如何知道CityGetByCountryID方法?甚至可能有更多类具有相同的方法。
  • 通过该方法获得的对象与City实例无关,但其位置似乎意味着这样的关联。
  • 如果您从EDMX中移除了属性Country(例如因为它从未使用过),该方法也会消失。
  • 主要原因:导航属性无法替代。如果您想获得Categories 他们的Products,您必须以EF知道如何关联它们的方式加载它们。您可以通过Include执行此操作,也可以将其包含在投影中,或通过延迟加载,或稍后提取Products,但在同一上下文中提取所有 。您提出的方法只能生成分离的实体,也会断开连接(即不附加到上下文)。

还有其他模式可以隐藏其他应用程序层的数据层详细信息,例如具有依赖项注入的存储库。

答案 1 :(得分:0)

以下是我获取外键属性名称的方法。

SELECT REGEXP_SUBSTR('STRING_EXAMPLE','[^PLE]+',1,1) from dual;