小编Jon*_*rty的帖子

清理旧的 Entity Framework Core 迁移的推荐方法

在开发我们的应用程序一段时间后,我们已经积累了相当多的 EFCore 数据库迁移。由于 EFCore 为每次迁移添加了整个 db 模型的快照,因此这段代码加起来相当多。经过分析,我们大约 80% 的编译时间都花在了迁移上(编译 + Roslyn 分析器)。

所以是时候清理一些旧的迁移了!但最好的方法是什么?好像没有官方的指导...

我们不需要任何回滚(我们只向前滚),所以这让事情变得更简单。我们确实需要支持从头开始创建数据库,并从最近几次迁移中更新数据库。

我试过的:

  1. 核选项似乎是删除所有迁移和模型快照,并创建一个新的初始迁移。虽然这很好,但似乎有点危险。使用这种方法,我们需要非常小心,数据库模式的每个部分都是代码模型的一部分。例如,我们遇到的一种边缘情况是 EFCore 尚不支持检查约束。所以我们在迁移中添加了一个检查约束,而不是在代码模型中。因此,在创建新的初始迁移时,已检查的约束不是其中的一部分。

  2. 作为实验,我尝试从所有旧迁移中删除模型快照,因为快照是导致编译时间过长的代码的 90%。我发现,EFCore 仅使用快照作为比较工具来进行新的迁移。删除快照后,旧的迁移在新数据库上运行时不再执行。

那么有没有更好的方法来完成我想要的?

entity-framework entity-framework-core .net-core

12
推荐指数
2
解决办法
4744
查看次数

Typeconverter无法在asp.net核心中运行

我已经Amount存储在数据库中了decimal.我希望用千位分隔符在UI上显示该值.我可以[DisplayFormat(DataFormatString = "{0:N2}", ApplyFormatInEditMode = true)]在amount属性上添加属性,这将显示千位分隔符的数字,但是当我将值POST回服务器时,由于逗号,MVC模型绑定将不起作用.

我创建了一个自定义类型转换器,可以转换decimalstring然后转换stringdecimal

public class NumberConverter : TypeConverter
{
    public override bool CanConvertFrom(
        ITypeDescriptorContext context,
        Type sourceType)
    {
        if (sourceType == typeof(decimal))
        {
            return true;
        }
        return base.CanConvertFrom(context, sourceType);
    }
    public override object ConvertFrom(ITypeDescriptorContext context,
        CultureInfo culture, object value)
    {
        if (value is decimal)
        {
            return string.Format("{0:N2}", value);
        }
        return base.ConvertFrom(context, culture, value);
    }
    public override bool CanConvertTo(ITypeDescriptorContext context,
        Type destinationType)
    {
        if …
Run Code Online (Sandbox Code Playgroud)

asp.net-core-mvc coreclr asp.net-core asp.net-core-1.0

9
推荐指数
1
解决办法
2143
查看次数