sql-server – 如何在EF代码中首先创建持久计算列?

前端之家收集整理的这篇文章主要介绍了sql-server – 如何在EF代码中首先创建持久计算列?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何使此列与数据库中的PERSISTED COMPUTED列类似?

我当前的尝试(它在种子中加载所有带有null的CompCol行):

public class Call
    {
        public Call()
        {
        }

        [Key]
        public int Id { get; set; }

        [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
        public string CompCol
        {
            get
            {
                return "ABC-" + Convert.ToString(Id).PadLeft(5,'0');
            }
            protected set {}
        }
}

解决方法

我找到的解决方案是:

>确保已关闭自动迁移.这样VS就会生成一个脚本(流畅的api代码)供我们进一步定制而不是仅运行它.所以在配置类中:

public Configuration()
{
    AutomaticMigrationsEnabled = false;
}

>将该字段添加到类并将其设置为计算如此,setter是私有的,因为我们显然无法写入计算字段:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public string BreakdownNo { get; private set; }

>然后在程序包管理器控制台中执行add-migration [xyz-name]以生成迁移代码,该代码显示在具有给定名称的迁移文件夹下.
>在迁移内注释掉Up()中的代码添加自定义sql,如下所示:

public override void Up()
{
    //AddColumn("dbo.Calls","BreakdownNo",c => c.String());
    sql("ALTER TABLE dbo.Calls ADD BreakdownNo AS ('BD'+RIGHT('00000'+ CAST(Id AS VARCHAR),6))");
}

>在PM中执行更新数据库,它应该正确添加计算列.

进一步说明:如果你得到错误的公式,那么你将不得不通过执行update-database -targetMigration来恢复迁移:[迁移的名称返回]然后执行另一个添加迁移名称并在那里修改你的公式,完成关闭update-database.可能有更好的方法,但这是我发现和使用的方式.

然而,我没有找到让这个领域持续存在的方法.

猜你在找的MsSQL相关文章