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]以生成迁移代码,该代码将显示在具有给定名称的迁移文件夹下. 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.可能有更好的方法,但这是我发现和使用的方式. 然而,我没有找到让这个领域持续存在的方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |