在 EF Core 8 中使用 T4 将 HasDefaultValue 替换为 HasDefaultValueSql

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

我正在尝试从 .NET 7 升级到 .NET 8。我有一个数据库优先的 EF 设置。有些值通过我的 T4 类型更改为枚举值。

在 .NET 7 中,这一切都运行得很好。其中一些值在我们的数据库中也有默认约束。在 EF Core 8 中,脚手架决定不使用

HasDefaultValueSql
(这在 100% 的情况下都是正确的,因为默认值存在于数据库中),而应该使用
HasDefalutValue
,目前这是不正确的-枚举值。 GitHub 上的这个人 也遇到了同样的问题,为了了解更多背景信息。

T4 或其他方式是否有办法以编程方式将

HasDefaultValue
替换为
HasDefaultValueSql

目前的情况,这对我们来说是一个重大更改,尽管没有列在 EF Core 8 重大更改列表中。

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

我尝试完全删除

HasDefaultValue
线,我可以在 T4 上做到这一点,但是,这并不能解决问题。我尝试在 T4 模板中将
HasDefaultValue
替换为
HasDefaultValueSql
,但这似乎没有任何作用:

propertyFluentApiCalls.Method.Replace("HasDefaultValue", "HasDefaultValueSql");
c# entity-framework-core .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.