我需要使用实体框架执行原始 SQL 作为数据库初始化的一部分。需要 SQL 来设置列的排序规则,当给定上下文时,代码如下所示
context.Database.ExecuteSqlCommand("ALTER TABLE my_table ALTER COLUMN my_column nvarchar(200) COLLATE Latin1_General_CS_AS");
Run Code Online (Sandbox Code Playgroud)
问题是这个代码应该放在哪里呢?如果我将它放入EF 创建的Seed方法中,它会起作用,但如果我决定稍后删除迁移和重新设定基准,我将失去执行 SQL 的所有知识。理想情况下,我希望将此 SQL 执行抽象为 EF 知道在每次启用迁移和更新数据库时执行的另一个类。Configuration.csenable-migrations
我考虑过使用数据库初始值设定项,但进一步阅读后发现,这些仅由调用应用程序调用:这不应该是调用应用程序的责任 - 我希望它在实体框架创建数据库时设置排序规则。
我如何确保将原始 SQL 作为 EF 初始/基线配置的一部分执行,这样我就不会丢失将来所做的事情的知识(即不只是将其全部集中到 default 的种子方法中Configuration.cs)
void Up() {
Sql("ALTER TABLE my_table ALTER COLUMN my_column nvarchar(200) COLLATE Latin1_General_CS_AS");
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是作为种子方法的一部分来执行此操作,但迁移似乎更明智。
| 归档时间: |
|
| 查看次数: |
3531 次 |
| 最近记录: |