Dar*_*ryn 17 entity-framework code-first ef-code-first asp.net-mvc-4
我正在MVC 4应用程序上进行实体框架(v 5)代码首次迁移.我想在数据库级别添加一个唯一约束.
我知道这可以在创建表时完成,但我已经有了一个表. http://msdn.microsoft.com/en-US/data/jj591621
我尝试了以下内容,标记为答案答案:EFCodeFirst和SqlCe4的唯一约束
我的数据库上下文略有不同,我提供的连接名称如下
public AppDatabaseContext() : base("MyConnectionDBContext")
Run Code Online (Sandbox Code Playgroud)
当我使用包管理控制台更新数据库时,不会调用重写的种子方法:
protected override void Seed(AppDatabaseContext context)
Run Code Online (Sandbox Code Playgroud)
我也尝试了以下内容:http://romiller.com/2010/07/31/ef-ctp4-tips-tricks-running-additional-ddl/
我没有使用嵌套类,这是因为我似乎必须通过app.config注册初始化程序.我在代码中初始化它时无法正常工作.调用InitializeDatabase,但以下条件永远不会成立:
(!context.Database.Exists() || !context.Database.ModelMatchesDatabase())
Run Code Online (Sandbox Code Playgroud)
这是因为在迁移运行后会发生这种情况......
我也在一个阶段尝试了这个:实体框架代码中的唯一约束首先,它与以前一样是问题,这个条件永远不会返回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");
}
Run Code Online (Sandbox Code Playgroud)
显然使用正确的SQL ...
Mar*_*rkG 30
使用代码优先迁移,我只是在Up()方法中使用它来在单个列上添加唯一索引:
CreateIndex(table: "Organisations",
column: "Name",
unique: true, // unique index
name: "MyIndex");
Run Code Online (Sandbox Code Playgroud)
......然后在Down()方法中:
DropIndex(table: "Organisations",
name: "MyIndex");
Run Code Online (Sandbox Code Playgroud)
这就是你要追求的吗?
从EF 6.1开始,您现在可以在模型中使用其中任何一个
一个属性
[Index("IX_UniqueName", IsUnique = true)]
public string Name {get;set;}
Run Code Online (Sandbox Code Playgroud)
还是流利的
Property(s => s.Name).HasColumnAnnotation(IndexAnnotation.AnnotationName,
new IndexAnnotation(
new IndexAttribute("IX_UniqueName") { IsUnique = true }));
Run Code Online (Sandbox Code Playgroud)
流畅的方法并不完美,因为它疯狂的详细IMO,但至少它现在可能.
关于亚瑟维克斯博客的更多信息http://blog.oneunicorn.com/2014/02/15/ef-6-1-creating-indexes-with-indexattribute/
您可以使用Add-Migration程序包管理器控制台中的命令来构建新的迁移.创建空迁移后,在该Up方法中,您可以使用该类的CreateIndex方法DbMigration来创建新索引.它看起来像这样:
CreateIndex("dbo.Accounts", "AccessKey", unique: true);
| 归档时间: |
|
| 查看次数: |
11824 次 |
| 最近记录: |