코드 우선 마이그레이션을 사용하여 SQL 스크립트를 실행할 수 있습니까?
코드 우선 마이그레이션을 사용하여 sql 스크립트를 실행할 수 있습니까?
코드를 처음 사용하는데, 마이그레이션의 update-database 명령 전에 변경 사항을 SQL 스크립트 파일에 저장하려면 가능합니까?
가능하다면 완료할 수 있는 단계를 제공해주시기 바랍니다.또한 스크립트가 생성되면 마이그레이션을 사용하여 해당 스크립트를 실행할 수 있습니까?
먼저 마이그레이션을 생성해야 합니다.
Add-Migration RunSqlScript
그런 다음 생성된 마이그레이션 파일에 SQL을 쓸 수 있습니다.
// PLAIN SQL
Sql("UPDATE dbo.Table SET Created = GETDATE()");
// FROM FILE
var sqlFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Custom.sql");
Sql(File.ReadAllText(sqlFile));
그리고 당신은 도망가
Update-Database
내가 하고 싶은 일은 SQL 스크립트를 어셈블리에 리소스로 포함시키고 사용하는 것입니다.SqlResource
방법.Visual Studio 2017 15.5.6에서 이 접근 방식을 테스트했습니다.
먼저 마이그레이션 파일을 생성해야 합니다.
- Visual Studio에서 시작 프로젝트로 설정해야 합니다. 프로젝트의 시작은
DbContext
정의됨 - Visual Studio에서 PMC: View -> 기타 Windows -> Package Manager 콘솔을 엽니다.
- PMC에서 DbContext를 보유하는 프로젝트로 기본 프로젝트 설정
EF 코어와 EF 6.x가 모두 설치된 경우:
EntityFramework\Add-Migration RunSqlScript
EF 6.x만 설치된 경우:
Add-Migration RunSqlScript
마이그레이션 폴더에 SQL 스크립트 추가(마이그레이션 파일과 동일한 접두사로 이름 지정)
파일 속성 창에서 빌드 작업이 "포함된 리소스"인지 확인합니다. SQL 스크립트가 어셈블리에 포함되므로 출력 폴더에 복사할 필요가 없습니다.
에서 Up 방법을 업데이트합니다.RunSqlScript
이주
public override void Up()
{
string sqlResName = typeof(RunSqlScript).Namespace + ".201801310940543_RunSqlScript.sql";
this.SqlResource(sqlResName );
}
이것이 도움이 되길 바랍니다.
.NET Core 및 EF Core의 경우 마이그레이션에서 다음과 같은 작업을 수행할 수 있습니다.
protected override void Up(MigrationBuilder migrationBuilder)
{
var schema = "starter_core";
migrationBuilder.Sql($"INSERT INTO [{schema}].[Roles] ([Name]) VALUES ('transporter')");
}
SQL과 마찬가지로 다른 SqlFile 메서드가 있습니다.당신은 그것을 직접 사용할 수 있습니다.
조금 늦었지만 도움이 될 수 있습니다.
정적 도우미 클래스는 다음과 같이 생성할 수 있습니다.
public static class SqlFileTrigger {
public static string GetRawSql(string fileName) {
var baseDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Migrations"); // your default migrations folder
var filePath = Path.Combine(baseDir, fileName);
return File.ReadAllText(filePath);
}
}
그런 다음 유사한 명명 규칙을 사용하여 SQL 파일을 생성하고 다음과 같은 "{migrationName}_Up.sql" 및 "{migrationName}_Down.sql"을 생성합니다.
예를 들어, 생성된 마이그레이션의 이름이 "라고 가정합니다.20230120230041_AddAuditingProperties.cs
"
이렇게 하면 마이그레이션 아래 그룹화됩니다..cs
파일을 올바르게 저장합니다. (이것을 위해 별도의 폴더를 만들 수도 있지만, 저는 보통 필요한 경우 쉽게 확인할 수 있도록 폴더를 쌓아두는 것을 선호합니다.)
그런 다음 "를 추가할 수 있습니다.20230120230041_AddAuditingProperties_Up.sql
뿐만 아니라 "20230120230041_AddAuditingProperties_Down.sql
(다운 SQL이 필요한 경우)
그러면 .NETEF의 경우:
public partial class AddAuditingProperties : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
Sql(Utils.SqlFileTrigger.GetRawSql("20230120230041_AddAuditingProperties_Up.sql"));
}
protected override void Down(MigrationBuilder migrationBuilder)
{
Sql(
Utils.SqlFileTrigger.GetRawSql("20230120230041_AddAuditingProperties_Down.sql"));
}
}
.NET Core EF-Core의 경우
public partial class AddAuditingProperties : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql(Utils.SqlFileTrigger.GetRawSql("20230120230041_AddAuditingProperties_Up.sql"));
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql(
Utils.SqlFileTrigger.GetRawSql("20230120230041_AddAuditingProperties_Down.sql"));
}
}
및 파일을 오른쪽 단추로 하고 "PS: 참고서자서동으를배계로포및경오획실하마을시생우십오스설하"를 설정하십시오Build Action
"로서Content
그리고 "Copy to Output Directory
"로서Copy always
이 안 때가 있었어요 - 설정이 안 됐을 때 문제가 봐요.
- 하여 다음과 새 할 수 . 패키지 관리자는 다음과 같습니다.
add-migration add_defaultValues
- 할 명령어가 를 추가합니다.
protected override void Up(MigrationBuilder migrationBuilder) { string Sql = @"GO INSERT [dbo].[TableName] ([Layer], [Environment], [Group], [Section], [Value], [Description], [LastChangeDate], [LoadType]) VALUES (N'ADMIN', N'TEST', N'PERFORMANCE', N'ALLOW_DB', N'true', NULL, CAST(N'2022-07-18T00:00:00.0000000' AS DateTime2), N'STARTUP') GO INSERT [dbo].[TableName] ([Layer], [Environment], [Group], [Section], [Value], [Description], [LastChangeDate], [LoadType]) VALUES (N'ADMIN', N'TEST', N'PERFORMANCE', N'ALLOW_FILE', N'false', NULL, CAST(N'2022-07-18T00:00:00.0000000' AS DateTime2), N'STARTUP') GO INSERT [dbo].[TableName] ([Layer], [Environment], [Group], [Section], [Value], [Description], [LastChangeDate], [LoadType]) VALUES (N'ADMIN', N'TEST', N'PERFORMANCE', N'ALLOW_MAIL', N'false', NULL, CAST(N'2022-07-18T00:00:00.0000000' AS DateTime2), N'STARTUP') GO"; migrationBuilder.Sql(Sql); }
언급URL : https://stackoverflow.com/questions/32125937/can-we-run-sql-script-using-code-first-migrations
'programing' 카테고리의 다른 글
동일한 그래프에서 ggplot2를 사용하여 두 변수를 선으로 표시 (0) | 2023.06.28 |
---|---|
각 사용자를 Firebase의 데이터에 연결하려면 어떻게 해야 합니까? (0) | 2023.06.23 |
C# "is" 키워드에 해당하는 VB.NET은 무엇입니까? (0) | 2023.06.23 |
Oracle SQL 개발자의 DB2 데이터베이스 (0) | 2023.06.23 |
Oracle과 같이 mysql의 날짜 필드 잘라내기 (0) | 2023.06.23 |