entity-framework - 使用 Code First 迁移的 Entity Framework 的唯一约束

标签 entity-framework ef-code-first asp.net-mvc-4 code-first

我正在 MVC 4 应用程序上进行 Entity Framework (v 5) 代码优先迁移。我想在数据库级别添加一个唯一约束。

我知道这可以在创建表时完成,但我已经有一个表。
http://msdn.microsoft.com/en-US/data/jj591621

我尝试了以下,标记为答案:Unique constraint with EFCodeFirst and SqlCe4

我的数据库上下文略有不同,我提供的连接名称如下

public AppDatabaseContext() : base("MyConnectionDBContext")

当我使用包管理控制台更新数据库时,不会调用覆盖的种子方法:
protected override void Seed(AppDatabaseContext context)

我还尝试了以下方法:http://romiller.com/2010/07/31/ef-ctp4-tips-tricks-running-additional-ddl/

我没有使用嵌套类,这是因为我似乎必须通过 app.config 注册初始化程序。在代码中初始化它时,我无法让它工作。 InitializeDatabase 被调用,但以下条件永远不会成立:
(!context.Database.Exists() || !context.Database.ModelMatchesDatabase())

这是因为这发生在迁移运行之后......

我也在一个阶段尝试过:Unique Constraint in Entity Framework Code First ,这和以前的问题一样,这个条件永远不会返回真。

理想情况下,我想在我的迁移文件中包含一些标准 SQL。有没有办法做到这一点?如果没有,我在哪里可以看到如何使用代码优先迁移来实现这一点?

谢谢!

更新:

有什么原因我不能使用 SQL 函数吗?
 public override void Up()
 {
        AddColumn("Posts", "Abstract", c => c.String());

        Sql("UPDATE Posts SET Abstract = LEFT(Content, 100) WHERE Abstract IS NULL");
 }

显然使用正确的SQL ...

最佳答案

对于代码优先迁移,我刚刚在 Up() 中使用了它。在单个列上添加唯一索引的方法:

CreateIndex(table: "Organisations", 
            column: "Name", 
            unique: true, // unique index
            name: "MyIndex");

...然后在 Down()方法:
DropIndex(table: "Organisations", 
          name: "MyIndex");

这就是你所追求的吗?

关于entity-framework - 使用 Code First 迁移的 Entity Framework 的唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13070431/

相关文章:

c# - 如何等待(在异步方法中)包含 C# 方法调用的 linq 请求

c# - 为什么 WebApi Controller 运行后没有人处理 DbContext?

c# - 更智能的 Entity Framework Codefirst 流畅的 API

asp.net - 404 重定向仅针对页面,不适用于图像

c# - Mvc raw没有输出

c# - 尝试连接到 Azure SQL 时提供程序未返回 ProviderManifestToken 字符串

asp.net-mvc - LINQ to Entity,使用 SQL LIKE 运算符

entity-framework - EF4.1 代码优先 : Stored Procedure with output parameter

c# - Entity Framework 代码优先查找与 SingleOrDefault(预加载)

c# - 独立类库中的 ASP.Net WebAPI Controller