是否有"优雅"的方式给特定属性一个默认值?
也许通过DataAnnotations,类似于:
[DefaultValue("true")]
public bool Active { get; set; }
Run Code Online (Sandbox Code Playgroud)
谢谢.
我将EntityFramework.Migrations(Beta 1)添加到现有的Code-First应用程序中,该应用程序正在进行一些更改(对于我从代码优先API生成的表的迁移功能和更多微调)并进入GETDATE ()场景.
我已经在我的DbContext中使用自定义初始化程序类来运行SQL脚本来设置一些字段并在我的数据库中创建索引.我的几个AlterTable脚本主要用于设置具有默认值的字段(例如某些DateTime字段设置为GETDATE()).我真的希望EntityFramework.Migrations有一个答案,因为你可以很容易地指定defaultValue,但到目前为止我没有看到一个.
有任何想法吗?我真的希望做下面的事情会神奇地起作用.(毕竟这是'神奇的独角兽')
DateCreated = c.DateTime(nullable: false, defaultValue: DateTime.Now)
Run Code Online (Sandbox Code Playgroud)
不幸的是,从逻辑上讲,它将我的默认值设置Update-Database为执行命令的时间.
在删除列的迁移操作期间,如何在尝试删除列之前先生成 SQL 以检查该列是否存在?
对于删除列操作,实体框架当前生成这样的 sql 来删除列:
// Migration Operation:
DropColumn("dbo.Table", "Column");
// TSQL generated:
// Dependency management logic ...
ALTER TABLE [dbo].[Table] DROP COLUMN [Column]
Run Code Online (Sandbox Code Playgroud)
如何更改 SQL 以首先检查列是否存在:
// Migration Operation:
DropColumn("dbo.Table", "Column");
// TSQL desired:
IF EXISTS (SELECT * FROM sys.columns WHERE object_id = Object_id('dbo.Table') AND name = 'Column')
BEGIN
// Dependency management logic ...
ALTER TABLE [dbo].[Table] DROP COLUMN [Column]
END
Run Code Online (Sandbox Code Playgroud)
我知道可以通过继承自SqlServerMigrationSqlGenerator. 我这样做的尝试未能将默认放置列逻辑包装在一个IF块中。请参阅下面的示例:
public class CustomSqlServerMigrationSqlGenerator: SqlServerMigrationSqlGenerator
{
/// <summary>
/// Drop column only …Run Code Online (Sandbox Code Playgroud) entity-framework sql-generation ef-code-first entity-framework-6 entity-framework-migrations