[SQL] 내가 모델 첫 번째 방법에서 날짜로 설정 SQL 유형의 구조 주석을 어떻게 사용합니까
SQL내가 모델 첫 번째 방법에서 날짜로 설정 SQL 유형의 구조 주석을 어떻게 사용합니까
그것은 엔티티 프레임 워크의 디자이너를 통해 단지 날짜 (NOT 날짜)로 설정 유형 수 있습니까?
나는 주위를 살펴했고 내가 찾은있는 유일한 대답은 전년 대비 MSDN 포럼에서 게시물입니다 ...
http://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/28e45675-f64b-41f0-9f36-03b67cdf2e1b
여기 아주 새로운 그리고 난 정말 그들이 구조 주석에 대해 이야기 지시를 이해하지 ...
내가 생성 된 SQL 스크립트를 통해 이동하고 각 줄을 변경하지만 난 오히려 그렇게 할 수 있습니다 ...
해결법
-
==============================
1.구조 주석 - 좋은. 내가이 기능에 대해 들어 처음이지만 작동합니다. 난 그냥 그것을 시도. 나는 그것을 조금 설명하려고합니다.
구조 주석 - 좋은. 내가이 기능에 대해 들어 처음이지만 작동합니다. 난 그냥 그것을 시도. 나는 그것을 조금 설명하려고합니다.
구조 주석 EDMX 파일에 추가 무작위 XML입니다. 디자이너의 요소를 배치 관련 CSDL, MSL, SSDL 및 부품 - EDMX 파일은 실제로 4 부분으로 구성되어 있습니다 느릅 나무 바로 XML이다.
처음 모델을 시작하면, 당신은 SSDL이 작성되면 다른 T4 템플릿 생성에만 CSDL 부분 SSDL 및 MSL 모두 몇 가지 자동 프로세스 (워크 플로우에서 실행 T4 템플릿을) 생성됩니다이 (당신은 당신의 모델에서 데이터베이스를 생성 할) 데이터베이스 작성을위한 SQL 스크립트.
링크 된 MSDN 포럼의 스레드에 설명 된 구조 주석 힌트입니다. 당신은 (- 솔루션 탐색기에서 파일을 클릭하고 열기를 선택하면 XML로 EDMX를 열어야합니다)를 EDMX의 CSDL 부분으로 구조 주석을 배치합니다. 내 테스트 CSDL은 세 가지 속성 (엔티티가 나중에이 질문에 스크린 샷에서 볼 수 있습니다)와 단일 사용자 엔티티를 설명합니다 :
<!-- CSDL content --> <edmx:ConceptualModels> <Schema xmlns="http://schemas.microsoft.com/ado/2008/09/edm" xmlns:cg="http://schemas.microsoft.com/ado/2006/04/codegeneration" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns:custom="http://tempuri.org/custom" Namespace="Model" Alias="Self" > <EntityContainer Name="ModelContainer" annotation:LazyLoadingEnabled="true"> <EntitySet Name="UsersSet" EntityType="Model.User" /> </EntityContainer> <EntityType Name="User"> <Key> <PropertyRef Name="Id" /> </Key> <Property Type="Int32" Name="Id" Nullable="false" annotation:StoreGeneratedPattern="Identity" /> <Property Type="String" Name="Login" Nullable="false" /> <Property Type="DateTime" Name="CreatedAt" Nullable="false"> <custom:SqlType edmx:CopyToSSDL="true">Date</custom:SqlType> </Property> </EntityType> </Schema> </edmx:ConceptualModels>
XMLNS : 나는 스키마 요소에 사용자 정의 네임 스페이스 정의를 추가 한 사용자 정의 = "http://tempuri.org/custom"와 CreatedAt 속성에 대한 사용자 정의 구조 주석을 정의 :
<Property Type="DateTime" Name="CreatedAt" Nullable="false"> <custom:SqlType edmx:CopyToSSDL="true">Date</custom:SqlType> </Property>
구조 주석에 사용되는 네임 스페이스 또는 요소의 이름은 중요하지 않습니다 - 그것은 절대적으로 최대 당신에게 당신이 사용합니까 어떤 이름이다. 유일한 중요한 것은 edmx입니다 : CopyToSSDL = "true"로 속성. 이 속성은 SSDL 생성에 사용 T4 템플릿에 의해 인식되고 그냥이 요소를 소요하고 SSDL에 배치합니다. 생성 된 SSDL의 외모와 같은 :
<Schema Namespace="Model.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2008" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl"> <EntityContainer Name="ModelStoreContainer"> <EntitySet Name="UsersSet" EntityType="Model.Store.UsersSet" store:Type="Tables" Schema="dbo" /> </EntityContainer> <EntityType Name="UsersSet"> <Key> <PropertyRef Name="Id" /> </Key> <Property Name="Id" Type="int" StoreGeneratedPattern="Identity" Nullable="false" /> <Property Name="Login" Type="nvarchar(max)" Nullable="false" /> <Property Name="CreatedAt" Type="datetime" Nullable="false"> <custom:SqlType xmlns:custom="http://tempuri.org/custom">Date</custom:SqlType> </Property> </EntityType> </Schema>
유일한 점은 SSDL에 구조 주석을 이동했다. 모든 주석 일부 이름 값 컬렉션을 메타 데이터에 액세스 할 수 있습니다. 지금 당신은이 주석을 인식하고 대신 속성에 정의 형의 주석에 정의 된 값을 사용하는 SQL 스크립트 생성에 대한 책임 T4 템플릿을 수정해야합니다. 당신은 템플릿을 찾을 수 있습니다 :
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen\SSDLToSQL10.tt
(원본을 수정하지 않는 그래서)이 함께 기본 테이블 생성을 대체 할 새 위치에 복사 템플릿 파일 :
-- Creating table '<#=tableName#>' CREATE TABLE <# if (!IsSQLCE) {#>[<#=schemaName#>].<#}#>[<#=tableName#>] ( <# for (int p = 0; p < entitySet.ElementType.Properties.Count; p++) { EdmProperty prop = entitySet.ElementType.Properties[p]; #> [<#=Id(prop.Name)#>] <# if (prop.MetadataProperties.Contains("http://tempuri.org/custom:SqlType")) { MetadataProperty annotationProperty = prop.MetadataProperties["http://tempuri.org/custom:SqlType"]; XElement e = XElement.Parse(annotationProperty.Value.ToString()); string value = e.Value.Trim(); #> <#=value#> <# } else { #> <#=prop.ToStoreType()#> <# } #> <#=WriteIdentity(prop, targetVersion)#> <#=WriteNullable(prop.Nullable)#><#=(p < entitySet.ElementType.Properties.Count - 1) ? "," : ""#> <# } #> ); GO
이제 마지막 점은 SQL 스크립트 생성에 사용되는 템플릿을 변경한다. 열기 EDMX의 디자이너에서 파일 및 모델의 속성으로 이동은 (당신이 속성 창이 열립니다있는 동안 단지 디자이너 어딘가를 클릭). 수정 한 템플릿 변경 DDL 생성 템플릿입니다.
실행 모델에서 데이터베이스를 생성하고이 포함 된 SQL 스크립트를 생성합니다 :
-- Creating table 'UsersSet' CREATE TABLE [dbo].[UsersSet] ( [Id] int IDENTITY(1,1) NOT NULL, [Login] nvarchar(max) NOT NULL, [CreatedAt] Date NOT NULL ); GO
이것은 아마도 아직 본 EDMX I의 가장 진보 된 숨겨진 기능입니다. 함께 사용자 정의 T4 템플릿 주석 당신에게 클래스와 SQL 생성을 모두 제어를 많이 얻을 수 있습니다. 나는 첫 번째 모델을 사용하는 경우 예를 들어, 데이터베이스 인덱스 또는 고유 키에 대해 정의하려면이 옵션을 사용하여 상상이나 생성 POCO 클래스에 선택적으로 일부 사용자 지정 속성을 추가 할 수 있습니다.
이가 너무 숨겨져있는 이유는이를 사용하는 아웃 오브 박스 VS에는 도구 지원이 없다는 것입니다.
-
==============================
2.TiraggoEdmx에 대한 NuGet 모양에서, 그것은 아주 좋은 방법으로 EDMX 파일에서 모든 낮은 수준의 정보를 제공합니다. http://brewdawg.github.io/Tiraggo.Edmx/ 참조
TiraggoEdmx에 대한 NuGet 모양에서, 그것은 아주 좋은 방법으로 EDMX 파일에서 모든 낮은 수준의 정보를 제공합니다. http://brewdawg.github.io/Tiraggo.Edmx/ 참조
from https://stackoverflow.com/questions/5912839/how-do-i-use-structural-annotations-to-set-sql-type-to-date-in-model-first-appro by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의 1,062 - 키에 대한 중복 항목을 '0' 'PRIMARY' (0) | 2020.04.11 |
---|---|
[SQL] 큰 테이블에 오프셋 최적화 쿼리 (0) | 2020.04.11 |
[SQL] 시퀀스 만 행을 SQL 기 (0) | 2020.04.11 |
[SQL] 어떻게 커서를 사용하지 않고 SQL의 실행 합계를 계산합니까? (0) | 2020.04.11 |
[SQL] 크로스 조인을 사용하여 두 테이블 사이에 쉼표를 넣어의 차이점은 무엇입니까? (0) | 2020.04.11 |