【发布时间】:2016-10-06 11:35:18
【问题描述】:
我使用的 T4 模板对 this 答案中提出的模板稍作修改,以从我的 EF POCO 生成 typescript 接口。
EF Core POCO 是首先生成数据库的,并且某些数据库列具有默认值。这些由 EF 生成器正确映射到我的上下文中,例如.HasDefaultValueSql("0");
我对如何访问给定 EF 类的默认值有点困惑,我原以为 GetValueOrDefault 可能会解决问题,但这只是为 .net 类型提供默认值。
我看到有一些其他的解决方案可以让这个工作,但我似乎找不到一个还可以与 ASP .Net Core 一起工作的解决方案。
理想情况下,我想知道如何从其 MemberInfo 中确定属性是否具有默认 EF 值,因为 T4 模板中的以下行正在生成属性描述,修改它以输出默认值是最简单的TypeScript 定义的值。
foreach (MemberInfo mi in GetInterfaceMembers(t))
{
sb.AppendFormat(" {0}: {1};\n", mi.Name, GetTypeName(mi));
}
【问题讨论】:
-
如果您使用 data-annotation 属性设置默认值会容易得多。像
[DefaultValue("0")]这样的东西。然后您可以使用MemberInfo.CustomAttributes轻松访问它 -
您是否可以访问模板内的源
DbContext? -
@haim770 我正在从已经存在的数据库中生成类,我不拥有数据库,如果它发生变化,我希望能够在不手动检查默认值的情况下重新生成
-
@IvanStoev 我想我可以访问模板内的 dbcontext,我混合了 EF 和非 EF 类,但我可以轻松地将其拆分为 2 个模板
标签: c# entity-framework asp.net-core t4