加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 06:35:40 所属栏目:MsSql教程 来源:网络整理
导读:如何使此列与数据库中的PERSISTED COMPUTED列类似? 我当前的尝试(它在种子中加载所有带有null的CompCol行): public class Call { public Call() { } [Key] public int Id { get; set; } [DatabaseGenerated(DatabaseGeneratedOption.Computed)] public stri
如何使此列与数据库中的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.可能有更好的方法,但这是我发现和使用的方式.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读