使用 T4 将 HasDefaultValue 替换为 HasDefaultValueSql EF 8

问题描述 投票:0回答:1

我正在尝试从 .NET 7 升级到 .NET 8。我有一个数据库优先的 EF 设置。有些值通过我的 T4 类型更改为枚举值。在 .NET 7 中,这一切都运行得很好。其中一些值在我们的数据库中也有默认约束。在 EF 8 中,脚手架决定不使用 HasDefaultValueSql(这在 100% 的实例中都是正确的,因为默认值存在于数据库中),而应该使用 HasDefalutValue,这对于现在的枚举值来说是不正确的。 GitHub 上的这个人 也遇到了同样的问题,以获取更多背景信息。 T4 中是否有方法或其他方式以编程方式将 HasDefaultValue 替换为 HasDefaultValueSql? 目前的方式,这对我们来说是一个重大更改,尽管没有列在 EF 8 重大更改列表中

在你提出建议之前,是的,我知道完全删除默认约束是一种解决方案,但是,这不是当权者想要做的事情,也不是我真正想做的事情。

我尝试完全删除 HasDefaultValue 行,我可以从 T4 中做到这一点,但是,这并不能解决问题。我尝试在 T4 中用 HasDefaultValueSql 进行 HasDefaultValue 的字符串替换,但这似乎没有任何作用:

propertyFluentApiCalls.Method.Replace("HasDefaultValue", "HasDefaultValueSql");
c# entity-framework .net-8.0 t4
1个回答
0
投票

试试这个:

<# 
    var fluentApiCalls = propertyFluentApiCalls.Method;
    if (fluentApiCalls.Contains("HasDefaultValue"))
    {
        var defaultValueCall = fluentApiCalls.Substring(fluentApiCalls.IndexOf("HasDefaultValue"), fluentApiCalls.IndexOf(")") - fluentApiCalls.IndexOf("HasDefaultValue") + 1);
        fluentApiCalls = fluentApiCalls.Replace(defaultValueCall, "HasDefaultValueSql(\"<your_default_value_sql>\")");
    }
#>
© www.soinside.com 2019 - 2024. All rights reserved.