在Entity Framework Migration上执行Raw SQL

时间:2017-07-25 14:03:33

标签: entity-framework

我需要使用Entity Framework执行原始SQL作为数据库初始化的一部分。 SQL需要设置列的排序规则,当给定上下文时,代码看起来像这样

context.Database.ExecuteSqlCommand("ALTER TABLE my_table ALTER COLUMN my_column nvarchar(200) COLLATE Latin1_General_CS_AS");

问题是在哪里放这个代码?如果我将它放在EF创建的Seed方法Configuration.csenable-migrations它会工作但如果我决定删除迁移,我将失去执行SQL的所有知识和以后的rebaseline。理想情况下,我希望将此SQL执行抽象到EF每次启用迁移和更新数据库时都知道要执行的另一个类。

我考虑过使用database initializer但是在进一步阅读时看来这些只是由调用应用程序调用:这不应该是调用应用程序的责任 - 我希望它在实体时设置排序规则框架创建数据库。

我如何确保将我的原始SQL作为EF初始/基线配置的一部分执行,以便我不会失去将来所做的事情的知识(即不仅仅将其全部归入默认的种子方法中) Configuration.cs

1 个答案:

答案 0 :(得分:1)

void Up() {
   Sql("ALTER TABLE my_table ALTER COLUMN my_column nvarchar(200) COLLATE Latin1_General_CS_AS");
}

另一种选择是将其作为Seed方法的一部分,但迁移似乎更加明智。