相关疑难解决方法(0)

实体框架6代码第一个默认值

是否有"优雅"的方式给特定属性一个默认值?

也许通过DataAnnotations,类似于:

[DefaultValue("true")]
public bool Active { get; set; }
Run Code Online (Sandbox Code Playgroud)

谢谢.

entity-framework default-value ef-code-first

187
推荐指数
9
解决办法
20万
查看次数

可以使用Entity Framework迁移将DateTime字段默认为GETDATE()吗?

我将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为执行命令的时间.

entity-framework-4 ef-code-first ef-migrations

33
推荐指数
4
解决办法
4万
查看次数

实体框架 6:迁移删除列(如果存在)

在删除列的迁移操作期间,如何在尝试删除列之前先生成 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

6
推荐指数
1
解决办法
4100
查看次数