从 Entity Framework class 获取默认 sql 值

Get default sql value from Entity Framework class

我使用的是从 this 答案中提出的模板稍作修改的 T4 模板,以从我的 EF POCO 生成打字稿界面。

EF Core POCO 是先生成数据库,部分数据库列有默认值。这些由 EF 生成器正确映射到我的上下文中,例如.HasDefaultValueSql("0");

我对如何访问给定 EF class 的默认值感到有点困惑,我曾认为 GetValueOrDefault 可能会成功,但这只是为.net 类型。

我看到还有一些其他的解决方案可以让这个工作正常进行,但我似乎找不到可以与 ASP .Net Core 一起使用的解决方案。

理想情况下,我想知道如何确定 属性 是否具有来自其 MemberInfo 的默认 EF 值,因为 T4 模板中的以下行正在生成 属性 描述最容易修改它以输出 TypeScript def 的默认值。

foreach (MemberInfo mi in GetInterfaceMembers(t))
{
    sb.AppendFormat("  {0}: {1};\n", mi.Name, GetTypeName(mi));
}

如果您有权访问生成的 DbContext,则可以使用 DbContext.Model 提供的元数据而不是反射。

例如:

foreach (var type in db.Model.GetEntityTypes())
{
    foreach (var property in type.GetProperties())
    {
        var defaultValue = property.Relational().DefaultValue;
    }
}

还有很多有用的方法,比如IModel.FindEntityTypeIEnityType.FindProperty