我正在 MVC 4 应用程序上进行实体框架 (v 5) 代码优先迁移。我想在数据库级别添加一个唯一约束。
我知道这可以在创建表时完成,但我已经有一个表。 http://msdn.microsoft.com/en-US/data/jj591621
我尝试了以下,标记为答案:EFCodeFirst 和 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())
这是因为这发生在迁移运行之后......
我也在一个阶段尝试过这个:Entity Framework Code First 中的唯一约束,它和以前一样的问题,这个条件永远不会返回 true。
理想情况下,我想在我的迁移文件中包含一些标准 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 ...