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