(Visual Studio 2013 이상 사용)
데이터베이스에서 모델을 새로 고칠 때마다 EF 모델에서 클래스 생성자의 편집을 방지하거나 다른 방법으로 코드 재 빌드를 트리거하려면 변경을 수행하는 적절한 위치는 다음을 담당하는 T4 코드 파일에 있습니다. 실제로 모델 코드를 생성합니다. 몇 년 전 클래스와 속성이 실제로 생성되는 방식의 기본 메커니즘을 이해했을 때 동적 속성과 관련된 다른 문제가있었습니다. T4 !!! 그것이 얼마나 기적인가 :-D T4 구문은 처음에는 약간 위협적 일 수 있으므로 구문을 읽는 것이 현명합니다. 변경할 때 매우 집중하는 것도 좋은 생각입니다 :-)
그래서! 모델을 보면 .edmx 파일 아래에 .tt 파일이 있습니다. 이 .tt (T4) 파일은 실제로 모델 클래스를 생성하는 스크립트입니다. 스크립트는 모델을 빌드하거나 모델 편집기에서 일부를 변경할 때마다 자동으로 실행됩니다.
모델 설명 자의 이름이 Model1.edmx 라고 가정 해 보겠습니다 . 그 아래의 트리에 Model1.Context.tt 라는 파일이 있습니다 . Model1.Context.cs 파일 도 볼 수 있습니다. 이것은 분명히 귀하의 컨텍스트에 대한 실제 코드 파일입니다. 그러나이 파일은 .tt 스크립트 파일이 실행 된 결과입니다 ! 완전히 동적으로 생성됩니다. 그래서 그것을 편집 할 생각이 없습니다.
.tt 파일을 열면 다음과 같은 내용이 표시됩니다.
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF6.Utility.CS.ttinclude"#><#@
output extension=".cs"#><#
const string inputFile = @"Model1.edmx";
var textTransform = DynamicTextTransformation.Create(this);
..
..
또 다른 50 줄이 내려 가면 생성자 코드가 스크립팅되고 있습니다.
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
<#
if (container.FunctionImports.Any())
{
#>
using System.Data.Entity.Core.Objects;
using System.Linq;
<#
}
#>
<#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : DbContext
{
public <#=code.Escape(container)#>()
: base("name=<#=container.Name#>")
{
base.Configuration.ProxyCreationEnabled = false;
<#
if (!loader.IsLazyLoadingEnabled(container))
{
#>
this.Configuration.LazyLoadingEnabled = false;
<#
}
base.Configuration.ProxyCreationEnabled = false;
생성자의 첫 번째 줄이되 도록 속성을 추가했습니다 .
파일을 저장하고 Model1.Context.cs 파일을 열어 결과 코드를 확인합니다. 템플릿 스크립트를 강제로 실행하려면 메뉴를 선택하십시오.
빌드-모든 T4 템플릿 변환
.cs 파일이 전혀 생성되지 않거나 편집기에서 열면 명백한 오류가 발생하므로 T4 코드에서 실수를했는지 쉽게 알 수 있습니다.