코드 생 성 데이터베이스 및 업데이트 데이터베이스: Entity Framework first code (http://www.cnblogs.com/haogj/archive/2012/02/17/2356537.ht
원본 주소:http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-code-based-migrations-walkthrough.aspx
EF 4.3 코드 기반 마 이 그 레이 션 워 크 스 루
준비 작업
시작 하기 전에 우 리 는 하나의 프로젝트 와 Code First 모델 이 필요 합 니 다. 이번 시연 에 대해 우 리 는 전형 적 인 블 로그 블 로그 와 답장 Post 모델 을 사용 합 니 다.
1. 새 것 만 들 기 MigrationsCodeDemo 콘 솔 응용 프로그램
2. 프로젝트 에 최신 버 전의 EntityFramework NuGet 패 키 지 를 추가 합 니 다.
가방 관리자 콘 솔 을 찾 습 니 다.
Install - Package EntityFramework 명령 을 실행 합 니 다.
성공 한 프로젝트 파일 은 다음 과 같 습 니 다.
초기 모델 과 데이터 베 이 스 를 만 듭 니 다.
1. 다음 Model. cs 파일 을 추가 합 니 다. 코드 는 하나의 Blog 류 를 정의 하여 우리 의 모델 대상 을 표시 합 니 다. BlogContext 류 는 바로 EF Code First 의 문맥 입 니 다.
using
System.Data.Entity;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity.Infrastructure;
namespace MigrationsCodeDemo
{
public class BlogContext : DbContext
{
public DbSet Blogs { get; set; }
}
public class Blog
{
public int BlogId { get; set; }
public string Name { get; set; }
}
}
2. 지금 우 리 는 이미 모델 이 하나 있 으 니 데이터 방문 을 할 때 가 되 었 다.다음 코드 를 사용 하여 Program. cs 파일 을 업데이트 합 니 다.
using
System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MigrationsCodeDemo
{
class Program
{
static void Main(string[] args)
{
using (var db = new BlogContext())
{
db.Blogs.Add(new Blog { Name = "Another Blog " });
db.SaveChanges();
foreach (var blog in db.Blogs)
{
Console.WriteLine(blog.Name);
}
}
}
}
}
3. 프로그램 을 실행 하면 로 컬 SQLExpress 데이터베이스 에서 데이터 베 이 스 를 볼 수 있 습 니 다.
이전 사용 하기
1. 블 로그 클래스 에 Url 속성 을 추가 합 니 다.
public class Blog
{
public int BlogId { get; set; }
public string Name { get; set; }
public string Url { get; set; }
}
2. 현재 프로그램 을 실행 하면 다음 과 같은 이상 을 볼 수 있 습 니 다.처리 되 지 않 은 이상: System.InvalidOperationException: The model backing the 'BlogContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).
3. 이상 한 제안 처럼 Code First 이전 을 시작 할 때 입 니 다. 첫 번 째 단 계 는 우리 의 컨 텍스트 에 이전 지원 을 사용 하 는 것 입 니 다.
패키지 관리자 의 콘 솔 에서 명령 실행: Enable - Migrations
4. 이 명령 은 프로젝트 에 Migrations 폴 더 라 는 이름 을 추가 하고 폴 더 에 두 개의 파일 을 포함 합 니 다.
Configuration 클래스, 이 클래스 는 컨 텍스트 의 이전 행 위 를 설정 할 수 있 습 니 다. 이 프 리 젠 테 이 션 에서 우 리 는 기본 설정 만 사용 합 니 다.
이 항목 에 하나의 컨 텍스트 만 있 기 때문에 Enable - migrations 는 이 컨 텍스트 를 자동 으로 채 웁 니 다.
201202171353373_InitialCreate.cs 적중 하 다 InitialCreate ,이 이전 을 만 든 것 은 우리 가 이미 Code First 를 통 해 데이터 베 이 스 를 만 들 었 기 때문이다.이 이전 코드 는 우리 가 만 든 데이터 베 이 스 를 표시 합 니 다.
namespace
MigrationsCodeDemo.Migrations
{
using System.Data.Entity.Migrations;
public partial class InitialCreate : DbMigration
{
public override void Up()
{
CreateTable(
"Blogs",
c => new
{
BlogId = c.Int(nullable: false, identity: true),
Name = c.String(),
})
.PrimaryKey(t => t.BlogId);
}
public override void Down()
{
DropTable("Blogs");
}
}
}
첫 번 째 이전
너 는 두 명령 을 사용 할 것 이다.
add - migration, 모델 수정 을 바탕 으로 이전 비 계 를 만 들 것 입 니 다.
Update - database, 제출 하지 않 은 수정 사항 을 데이터베이스 에 제출 합 니 다.
1. 우 리 는 먼저 새로 추 가 된 Url 속성 에 이전 을 만 듭 니 다. add - migration 은 이 작업 을 완성 하 는 데 도움 을 줄 것 입 니 다. 우 리 는 이 이전 을 'AddBlogUrl' 이 라 고 명명 합 니 다.
실행: Add - Migration AddBlogUrl
프로젝트 에 파일 이 하나 추가 되 었 습 니 다 20120217113369AddBlogUrl.cs
내용 은 다음 과 같다.
namespace
MigrationsCodeDemo.Migrations
{
using System.Data.Entity.Migrations;
public partial class AddBlogUrl : DbMigration
{
public override void Up()
{
AddColumn("Blogs", "Url", c => c.String());
}
public override void Down()
{
DropColumn("Blogs", "Url");
}
}
}
3. 우 리 는 이 이전 에서 내용 을 편집 하거나 추가 할 수 있 지만 지금 은 아주 좋아 보 입 니 다. 우 리 는 이 이전 을 데이터베이스 에 제출 합 니 다.
실행: Update - Database
4. 현재 데이터베이스 에 Url 열 이 포함 되 어 있 습 니 다.
맞 춤 형 이전
다음은 어떻게 맞 춤 형 이전 을 하 는 지 살 펴 보 자.
1. 코드 에 답장 클래스 Post 를 추가 하고 블 로그 에 평 점 속성 을 추가 합 니 다.
using
System.Data.Entity;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity.Infrastructure;
namespace MigrationsCodeDemo
{
public class Blog
{
public int BlogId { get; set; }
public string Name { get; set; }
public string Url { get; set; }
public int Rating { get; set; }
public List Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
[MaxLength(200)]
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
}
2. add - migration 명령 을 사용 하여 이전 을 만 듭 니 다. AddPostClass 라 는 이름 입 니 다.
3. Code First Migrations 는 이전 을 만 들 었 지만 다음 과 같은 수정 사항 을 추가 하고 싶 습 니 다.
우선, Posts. Title 에 유일한 색인 을 추가 합 니 다.
비어 있 지 않 은 Blogs. Rating 열 을 추가 합 니 다. 표 에 데이터 가 존재 한다 면 CLR 의 기본 데이터 형식 값 을 새로 추 가 된 열 (Rating 은 정수 형식 이 고 0 일 것 입 니 다) 에 부여 합 니 다. 그러나 우 리 는 기본 값 이 3 이 되 기 를 바 랍 니 다. 그러면 이미 존재 하 는 블 로그 에 좋 은 평 점 이 있 을 것 입 니 다.
namespace
MigrationsCodeDemo.Migrations
{
using System.Data.Entity.Migrations;
public partial class AddPostClass : DbMigration
{
public override void Up()
{
CreateTable(
"Posts",
c => new
{
PostId = c.Int(nullable: false, identity: true),
Title = c.String(maxLength: 200),
Content = c.String(),
BlogId = c.Int(nullable: false),
})
.PrimaryKey(t => t.PostId)
.ForeignKey("Blogs", t => t.BlogId, cascadeDelete: true)
.Index(t => t.BlogId)
.Index(p => p.Title, unique: true);
AddColumn("Blogs", "Rating", c => c.Int(nullable: false, defaultValue: 3));
}
public override void Down()
{
DropIndex("Posts", new[] { "BlogId" });
DropForeignKey("Posts", "BlogId", "Blogs");
DropColumn("Blogs", "Rating");
DropTable("Posts");
}
}
}
4. Update - database 를 실행 하여 데이터베이스 에 제출 합 니 다. 이번 에는 생 성 된 SQL 스 크 립 트 를 볼 수 있 도록 인자 - Verbose 를 사용 할 수 있 습 니 다.
데이터 조작 / 맞 춤 형 SQL
우리 가 이미 완성 한 이전 은 데 이 터 를 수정 하거나 이동 하지 않 았 습 니 다. 이전 중 어느 곳 에서 든 임의의 스 크 립 트 를 실행 할 수 있 습 니 다.
1. 모델 에 요약 PostAbstrack 속성 을 추가 한 다음 에 발 표 된 내용 으로 요약 속성 을 채 우려 고 합 니 다.
public
class
Post
{
public int PostId { get; set; }
[MaxLength(200)]
public string Title { get; set; }
public string Content { get; set; }
public string Abstract { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
2. 이전 을 만 듭 니 다.
3. 생 성 된 이전 파일 수정,
namespace
MigrationsCodeDemo.Migrations
{
using System.Data.Entity.Migrations;
public partial class AddPostAbstract : DbMigration
{
public override void Up()
{
AddColumn("Posts", "Abstract", c => c.String());
Sql("UPDATE Posts SET Abstract = LEFT(Content, 100) WHERE Abstract IS NULL");
}
public override void Down()
{
DropColumn("Posts", "Abstract");
}
}
}
4. 데이터 베 이 스 를 업데이트 하면 최신 데 이 터 를 얻 을 수 있 습 니 다.Verbose 인 자 를 사용 하면 제출 한 스 크 립 트 를 볼 수 있 습 니 다.
특정 버 전 으로 이전 (강등 포함)
너 는 특정한 버 전 으로 업그레이드 하거나 강등 할 수 있다.
데이터 베 이 스 를 AddBlogUrl 이전 을 실행 한 상태 로 옮 기 고 싶다 고 가정 하면 - targetMigration 매개 변 수 를 통 해 등급 을 낮 춥 니 다.
최초의 빈 데이터베이스 로 돌아 가 고 싶다 면, 매개 변수 TargetMigration: $InitialDatabase 를 사용 할 수 있 습 니 다.
이전 스 크 립 트 가 져 오기
Update - database 를 실행 할 때 인자 - script 을 사용 합 니 다.
- sourceMigration: $InitialDatabase 는 시작 버 전 을 지정 합 니 다. - TargetMigration: "AddPostAbstract" 는 대상 버 전 을 지정 합 니 다.
AddPostAbstract 버 전 으로 이전 할 때 까지 초기 데이터 베 이 스 를 얻 고 싶 습 니 다.
실행 후 스 크 립 트 파일 을 얻 습 니 다.
CREATE
TABLE
[
Blogs
]
(
[BlogId] [int] NOT NULL IDENTITY,
[Name] [nvarchar](max),
CONSTRAINT [PK_Blogs] PRIMARY KEY ([BlogId])
)
CREATE TABLE [__MigrationHistory] (
[MigrationId] [nvarchar](255) NOT NULL,
[CreatedOn] [datetime] NOT NULL,
[Model] [varbinary](max) NOT NULL,
[ProductVersion] [nvarchar](32) NOT NULL,
CONSTRAINT [PK___MigrationHistory] PRIMARY KEY ([MigrationId])
)
BEGIN TRY
EXEC sp_MS_marksystemobject '__MigrationHistory'
END TRY
BEGIN CATCH
END CATCH
INSERT INTO [__MigrationHistory] ([MigrationId], [CreatedOn], [Model], [ProductVersion]) VALUES ('201202171353373_InitialCreate', '2012-02-17T14:51:25.032Z', 0x1F8B0800000000000400ECBD07601C499625262F6DCA7B7F4AF54AD7E074A10880601324D8904010ECC188CDE692EC1D69472329AB2A81CA6556655D661640CCED9DBCF7DE7BEFBDF7DE7BEFBDF7BA3B9D4E27F7DFFF3F5C6664016CF6CE4ADAC99E2180AAC81F3F7E7C1F3F22FEC7BFF71F7CFC7BBC5B94E9655E3745B5FCECA3DDF1CE4769BE9C56B36279F1D947EBF67CFBE0A3DFE3E8374E1E9FCE16EFD29F34EDF6D08EDE5C369F7D346FDBD5A3BB779BE93C5F64CD78514CEBAAA9CEDBF1B45ADCCD66D5DDBD9D9D83BBBB3B777302F111C14AD3C7AFD6CBB658E4FC07FD79522DA7F9AA5D67E517D52C2F1BFD9CBE79CD50D317D9226F56D934FFECA32F8A8B3A6B098BE684DA3ECD17D547E971596484C9EBBC3C7F4FB4761E02AD8F6C87D4E529A1D65EBFB95EE5DCED671F3D29AB0BBF05B5F9BDF2EBE003FAE8655DADF2BABD7E959F7BEF9DCD3E4AEF86EFDEEDBE6C5FEDBC07143EFBE86CD9DEDBFB287DB12ECB6C52D207E759D9E41FA5AB4F1FBD6EAB3AFF3C5FE644907CF6326BDBBCA6C9399BE53C0425C5A3D5A7B7A3C6C3BB3B7BA0C6DD6CB9AC5AA6710FF90EAAF8D720FABAAD89693E4A9F15EFF2D9F37C79D1CE2DB25F64EFCC27F4EB47E957CB82788C5E6AEB75EE0F4EFEDEDCE95775F9B3DCE7E3BB8E09FAAC41DCDA660551DD9B2F7C96BF6B3B6C22ED5FE7ADD7B2F92875C08567C7CC61510C6C5F4E24EE8A4C18D9B93B203C8FBFC8562B228E274CFA49FA5A24E964FBF5FB4BCB4260DC9D3611A1B1D8DA9E8843B38BBCF32D754D983E2BEAA67D9AB5D924C3749DCC16BD66B7A0ACE9C9277057341DBD4D6BFC2E6FF4D5C9B82FEF0C45DF7D46035A9080F1D8746484474C4DE88BAFA75999D503427E5295EBC57293C2D80445E4CF87219FDC1E020B930F803FE8BFFFF86E67FC5D227B22A32D3B6AAF3B659BB8BDDBC4F66EB9BEC3DD8F95D36EB61F3DD693261FA54498CB6206B67B7DDDB4F9628C06E3D7BFA83C290B1AAF6BF045B62CCEF3A67D53BDCD610B4932BEBE09B24AB76966E5FF9BED500112DC68717A66EAF6F6637999D5D379566F2DB277773EC026BC079CF7D3F37DA575B3B61F54F6C2759F7D349B90FFF2461054F3F035ED405F021EDFF5FDACC74FF3A6B87020E0752DF329749F036ADA9C2DCF2B43621A918F9169D299812FF2369B11618EEBB638CFA62D7D3DCD9B86CDF34F66E59A9A9C2E26F9EC6CF9E5BA5DADDBE3A6C91793F2DA1FEFE3BB9BFB676317E2FCF8CB156BEF6F620884664143C8BF5C3E5917E5CCE2FDACCFCA4320C0232A1F8415B92704EEE2DA427A512D6F0948C9F7345FE54B48D79B7CB12A0958F3E5F27576990FE376330D438A3D7E5A646402173E05E513C5E475463D7B5D5007FE1BAE3FFA93D8959CFCA3FF270000FFFF2B65B379590C0000, '4.3.0')
ALTER TABLE [Blogs] ADD [Url] [nvarchar](max)
INSERT INTO [__MigrationHistory] ([MigrationId], [CreatedOn], [Model], [ProductVersion]) VALUES ('201202171413369_AddBlogUrl', '2012-02-17T14:51:25.079Z', 0x1F8B0800000000000400ECBD07601C499625262F6DCA7B7F4AF54AD7E074A10880601324D8904010ECC188CDE692EC1D69472329AB2A81CA6556655D661640CCED9DBCF7DE7BEFBDF7DE7BEFBDF7BA3B9D4E27F7DFFF3F5C6664016CF6CE4ADAC99E2180AAC81F3F7E7C1F3F22FEC7BFF71F7CFC7BBC5B94E9655E3745B5FCECA3DDF1CE4769BE9C56B36279F1D947EBF67CFBE0A3DFE3E8374E1E9FCE16EFD29F34EDF6D08EDE5C369F7D346FDBD5A3BB779BE93C5F64CD78514CEBAAA9CEDBF1B45ADCCD66D5DDBD9D9D83BBBB3B777302F111C14AD3C7AFD6CBB658E4FC07FD79522DA7F9AA5D67E517D52C2F1BFD9CBE79CD50D317D9226F56D934FFECA32F8A8B3A6B098BE684DA3ECD17D547E971596484C9EBBC3C7F4FB4761E02AD8F6C87D4E529A1D65EBFB95EE5DCED671F3D29AB0BBF05B5F9BDF2EBE003FAE8655DADF2BABD7E959F7BEF9DCD3E4AEF86EFDEEDBE6C5FEDBC07143EFBE86CD9DEDBFB287DB12ECB6C52D207E759D9E41FA5AB4F1FBD6EAB3AFF3C5FE644907CF6326BDBBCA6C9399BE53C0425C5A3D5A7B7A3C6C3BB3B7BA0C6DD6CB9AC5AA6710FF90EAAF8D720FABAAD89693E4A9F15EFF2D9F37C79D1CE2DB25F64EFCC27F4EB47E957CB82788C5E6AEB75EE0F4EFEDEDCE95775F9B3DCE7E3BB8E09FAAC41DCDA660551DD9B2F7C96BF6B3B6C22ED5FE7ADD7B2F92875C08567C7CC61510C6C5F4E24EE8A4C18D9B93B203C8FBFC8562B228E274CFA49FA5A24E964FBF5FB4BCB4260DC9D3611A1B1D8DA9E8843B38BBCF32D754D983E2BEAA67D9AB5D924C3749DCC16BD66B7A0ACE9C9277057341DBD4D6BFC2E6FF4D5C9B82FEF0C45DF7D46035A9080F1D8746484474C4DE88BAFA75999D503427E5295EBC57293C2D80445E4CF87219FDC1E020B930F803FE8BFFFF86E67FC5D227B22A32D3B6AAF3B659BB8BDDBC4F66EB9BEC3DD8F95D36EB61F3DD693261FA54498CB6206B67B7DDDB4F9628C06E3D7BFA83C290B1AAF6BF045B62CCEF3A67D53BDCD610B4932BEBE09B24AB76966E5FF9BED500112DC68717A66EAF6F6637999D5D379566F2DB277773EC026BC079CF7D3F37DA575B3B61F54F6C2759F7D349B90FFF2461054F3F035ED405F021EDFF5FDACC74FF3A6B87020E0752DF329749F036ADA9C2DCF2B43621A918F9169D299812FF2369B11618EEBB638CFA62D7D3DCD9B86CDF34F66E59A9A9C2E26F9EC6CF9E5BA5DADDBE3A6C91793F2DA1FEFE3BB9BFB676317E2FCF8CB156BEF6F620884664143C8BF5C3E5917E5CCE2FDACCFCA4320C0232A1F8415B92704EEE2DA427A512D6F0948C9F7345FE54B48D79B7CB12A0958F3E5F27576990FE376330D438A3D7E5A646402173E05E513C5E475463D7B5D5007FE1BAE3FFA93D8959CFCA3FF270000FFFF2B65B379590C0000, '4.3.0')
CREATE TABLE [Posts] (
[PostId] [int] NOT NULL IDENTITY,
[Title] [nvarchar](200),
[Content] [nvarchar](max),
[BlogId] [int] NOT NULL,
CONSTRAINT [PK_Posts] PRIMARY KEY ([PostId])
)
CREATE INDEX [IX_BlogId] ON [Posts]([BlogId])
CREATE UNIQUE INDEX [IX_Title] ON [Posts]([Title])
ALTER TABLE [Blogs] ADD [Rating] [int] NOT NULL DEFAULT 3
ALTER TABLE [Posts] ADD CONSTRAINT [FK_Posts_Blogs_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [Blogs] ([BlogId]) ON DELETE CASCADE
INSERT INTO [__MigrationHistory] ([MigrationId], [CreatedOn], [Model], [ProductVersion]) VALUES ('201202171424494_AddPostClass', '2012-02-17T14:51:25.092Z', 0x1F8B0800000000000400ECBD07601C499625262F6DCA7B7F4AF54AD7E074A10880601324D8904010ECC188CDE692EC1D69472329AB2A81CA6556655D661640CCED9DBCF7DE7BEFBDF7DE7BEFBDF7BA3B9D4E27F7DFFF3F5C6664016CF6CE4ADAC99E2180AAC81F3F7E7C1F3F22FEC7BFF71F7CFC7BBC5B94E9655E3745B5FCECA3DDF1CE4769BE9C56B36279F1D947EBF67CFBE0A3DFE3E8374E1E9FCE16EFD29F34EDF6D08EDE5C369F7D346FDBD5A3BB779BE93C5F64CD78514CEBAAA9CEDBF1B45ADCCD66D5DDBD9D9D83BBBB3B777302F111C14AD3C7AFD6CBB658E4FC07FD79522DA7F9AA5D67E517D52C2F1BFD9CBE79CD50D317D9226F56D934FFECA32F8A8B3A6B098BE684DA3ECD17D547E971596484C9EBBC3C7F4FB4761E02AD8F6C87D4E529A1D65EBFB95EE5DCED671F3D29AB0BBF05B5F9BDF2EBE003FAE8655DADF2BABD7E959F7BEF9DCD3E4AEF86EFDEEDBE6C5FEDBC07143EFBE86CD9DEDBFB287DB12ECB6C52D207E759D9E41FA5AB4F1FBD6EAB3AFF3C5FE644907CF6326BDBBCA6C9399BE53C0425C5A3D5A7B7A3C6C3BB3B7BA0C6DD6CB9AC5AA6710FF90EAAF8D720FABAAD89693E4A9F15EFF2D9F37C79D1CE2DB25F64EFCC27F4EB47E957CB82788C5E6AEB75EE0F4EFEDEDCE95775F943EFF31591031D6D9E930E8C17D96571C174EC407B59356DF351FA2A2F8593E7C54AB8778C6F7E7F66B8F4595D2D5E55A536E70F7FFF37597D91B78446D5FDE675B5AEA71D141EDF75BCBC91C301E6EB7038DEFB3A1C6EDEFBFF0087BF29DAF27D599C7AFA40762385D8D210DFB3DF0F67F3DBA99EDBB2B9F0F1FB73B9E1E53E971BFEBF0D971F374D352DB86B8FEDA4DB7000A7CB593A88834C80C19AE8BD2EDB62551653EAF2B38FBED5A3460C98155B074C461F02DB0DF122605F2E9FE665DEE6E9F114E320C6C89A6936EBCF01D160167E42529AD71093AC246E6ADA3A2B966D5FA48BE5B45865E510CA9D17DEC3CE01290BBEFBCDD37C952F21C44374FFB07E2DF80E916EA2C9E3BB1ED3F43526A492DEC86B0F0196D4775DED29ED5FE7ADD79214BE63D4800B7A1C14BEACD6A2F7B2F063E7656F0021049537EFFB9E3076E9B8492E2C9216BFDE346C9204EF75A54D97A1C38144E4DDCE86FDEEF15D7117F583C77707FCCAC75F64AB152954CFCFD44FD2D7E2649E6CBF7E7F47722130EE4E9B883F69B1B53D9169CB2EF2CEB750FDB3FC595137EDD3ACCD2619F4EDC96CD16B760BDE333DF92CD89F23C354A6357E9737FA9EF638C6268E7ACF68400B08359BEDCE14F75F4BE1DE6765560F18A193AA5C2F969B657D188AB8A63E0CF9E4F610D8CFF401F007B77FDFF88C3E08F3591FCAE3BB1D2AF6B45A6FAE7A26209CF85BB18508EF07B245DF7F642837B145FCB521721AA7D12767DC01DD0445FD391F887E747B18D63BF3A1D80F6F0FE7FD18FD6795417A4AB5DBC4F66E956B47893E568516685A1E793782EF693869F2514AE4B92C66D06EAFAF9B365F8CD160FCFA17952765C1A4350DBEC896C579DEB46FAAB7F992FDED83AF9F04B04141D3CCCAFF3767020A90E0C688E8266F7D4304BFBCCCEAE93CABB716D9BB3BEF1B3A7851F907C109236D1EF3C621FD7F24C8FD5999BC20383554EF87A2EF37019DD8F3832633C2C05F6B32BF4E2C27FEEE0F33E40A1DDEAF113B7EAD986DC027BBAD16C248DE2B4EFBC0BE2CC80E35BFE1D8ACEF4677E7AA1FA10D066862A03EFB6836A164F31BE1DE78D8D2052BF3DE032B1FC7C04683A99FA5A8CE1FB3F3D36F0AE47AB1DFCF4EECD677278847D64BBB6C40BCD914170E04161196F934E00EDBE66C795E1926ED60649A7434D717799BCD88758EEBB638CFA62D7D3DCD9B864DD34F66E59A9A9C2E26F9EC6CF9E5BA5DAD5B1A72BE9894D73E31C0EC9BFAE70035C4F9F1972B76ADBF8921109A050D21FF72F9645D94338BF7B388DE1D000129527B85B96C61B72EAE2DA417D5F29680947C4F8DF0BFC9172B4A0BE6CD97CBD7D9653E8CDBCD340C29F6F86991517CB2F029289F2826AF33EAD9EB823AF0DF70FDD19FC4AEB46675F4FF040000FFFFFA5ABE06281B0000, '4.3.0')
ALTER TABLE [Posts] ADD [Abstract] [nvarchar](max)
UPDATE Posts SET Abstract = LEFT(Content, 100) WHERE Abstract IS NULL
INSERT INTO [__MigrationHistory] ([MigrationId], [CreatedOn], [Model], [ProductVersion]) VALUES ('201202171437449_AddPostAbstract', '2012-02-17T14:51:25.111Z', 0x1F8B0800000000000400ECBD07601C499625262F6DCA7B7F4AF54AD7E074A10880601324D8904010ECC188CDE692EC1D69472329AB2A81CA6556655D661640CCED9DBCF7DE7BEFBDF7DE7BEFBDF7BA3B9D4E27F7DFFF3F5C6664016CF6CE4ADAC99E2180AAC81F3F7E7C1F3F22FEC7BFF71F7CFC7BBC5B94E9655E3745B5FCECA3DDF1CE4769BE9C56B36279F1D947EBF67CFBE0A3DFE3E8374E1E9FCE16EFD29F34EDF6D08EDE5C369F7D346FDBD5A3BB779BE93C5F64CD78514CEBAAA9CEDBF1B45ADCCD66D5DDBD9D9D83BBBB3B777302F111C14AD3C7AFD6CBB658E4FC07FD79522DA7F9AA5D67E517D52C2F1BFD9CBE79CD50D317D9226F56D934FFECA32F8A8B3A6B098BE684DA3ECD17D547E971596484C9EBBC3C7F4FB4761E02AD8F6C87D4E529A1D65EBFB95EE5DCED671F3D29AB0BBF05B5F9BDF2EBE003FAE8655DADF2BABD7E959F7BEF9DCD3E4AEF86EFDEEDBE6C5FEDBC07143EFBE86CD9DEDBFB287DB12ECB6C52D207E759D9E41FA5AB4F1FBD6EAB3AFF3C5FE644907CF6326BDBBCA6C9399BE53C0425C5A3D5A7B7A3C6C3BB3B7BA0C6DD6CB9AC5AA6710FF90EAAF8D720FABAAD89693E4A9F15EFF2D9F37C79D1CE2DB25F64EFCC27F4EB47E957CB82788C5E6AEB75EE0F4EFEDEDCE95775F943EFF31591031D6D9E930E8C17D96571C174EC407B59356DF351FA2A2F8593E7C54AB8778C6F7E7F66B8F4595D2D5E55A536E70F7FFF37597D91B78446D5FDE675B5AEA71D141EDF75BCBC91C301E6EB7038DEFB3A1C6EDEFBFF0087BF29DAF27D599C7AFA40762385D8D210DFB3DF0F67F3E349D3D6D9F487DFF1ED74DE6DE54B04E8FDC5CB08515FBC8CE0DD46BC8E9BA69A16DCB5C7EFD26D3880D3E52C1DC44126C0604DF45E976DB12A8B2975F9D947DFEA512306CCEA0B074C461F02DB0DF122605F2E9FE665DEE6E9F114E3208ECC9A6936EBCF01D160167E42EA21AF219F59496C0C7E2A966D5F9714CB69B1CACA21943B2FBC87810552167CF79BA7F92A5F427B0CD1FDC3FAB5E03B44BA89268FEF7A4CD357D55007F4465E7B08B08A78D755DBD2FE75DE7A2DC9D238460DB8A0C741E1CB6AA67A2F0B3F765EF60610425079F3BEEF0963978E9BE4C22269F1EB4DC32649F05E57DA74193A1C4844DEED6CD8EF1EDF153F553F787C77C0A17DFC45B65A9142F51C5CFD247D2DDEEDC9F6EBF7F7601702E3EEB48938B2165BDB13D9D4EC22EF7C0B9B33CB9F1575D33ECDDA6C9241DF9ECC16BD66B7E03DD393CF82FD39324C655AE37779A3EFE28F636CE2A8F78C06B48050B3BFD099E2FE6B29E28AACCCEA0123745295EBC572B3AC0F43119FD887219FDC1E023BB83E00FEE0F6EF1B67D507613EEB43797CB743C59E56EBCD55CF0484137F2BB610E1FD40B6E83BAE0CE526B688BF36444EE3ADFAE48C7BBE9BA0A823E903D18F6E0FC3BA853E14FBE1EDE13837CF07E43EBD3DA4F713999F5556EBA9E76E13DBBB55D31D75FC585563A0B379E4DD24444F574A938F5222CF6531839E7C7DDDB4F9628C06E3D7BFA83C290B9E24D3E08B6C599CE74DFBA67A9B2F396438F8FA790C1BD734CDACFC7F7332A300096E0CEA6EF2FB3724219697593D9D67F5D6227B77E77D83102FB1F04170C264018F79E390FE3F12A7FFAC4C5E105F1BAAF7A3E9F79B804EF8FC4193D90D893F0858441ABE16677C9D1053DCF01F662418FAE15F23A4FD5AA1E480AB785B958691BC57F8F8817D59901D6A7EC32163DFBB3FEACC553F701C8C1BC5DA7DF6D16C42C9F737C2BDF168AA0B56E6BD07563E8E818DC6783F4BC1A63F66173EDC145FF642D29F9D90B2EF9B108FAC9776198578B3292E1C082CAA2CF369C01DB6CDD9F2BC324CDAC1C834E968AE2FF2369B912F735CB7C539A943FA7A9A370DDBB99FCCCA3535395D4CF2D9D9F2CB75BB5AB734E47C3129AF7D6280D937F5CF717388F3E32F57ECF17F134320340B1A42FEE5F2C9BA286716EF6711BD3B000252A4C60F73D9C2085E5C5B482FAAE52D0129F99E1AE17F932F5694ADCC9B2F97AFB3CB7C18B79B691852ECF1D322A3B069E153503E514C5E67D4B3D70575E0BFE1FAA33F895D690DEFE8FF090000FFFF18018B3A381C0000, '4.3.0')
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
nginx websocket ip_해시 규칙프로젝트 를 다운로드 한 후 서로 다른 네트워크 에 각각 이 demo 프로젝트 를 배치 합 니 다. 프로젝트 에서 환경 변수 에 따라 시스템 변 수 를 설정 합 니 다. spring.profiles.active=de...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.