복붙노트

[SQL] 내가 모델 첫 번째 방법에서 날짜로 설정 SQL 유형의 구조 주석을 어떻게 사용합니까

SQL

내가 모델 첫 번째 방법에서 날짜로 설정 SQL 유형의 구조 주석을 어떻게 사용합니까

그것은 엔티티 프레임 워크의 디자이너를 통해 단지 날짜 (NOT 날짜)로 설정 유형 수 있습니까?

나는 주위를 살펴했고 내가 찾은있는 유일한 대답은 전년 대비 MSDN 포럼에서 게시물입니다 ...

http://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/28e45675-f64b-41f0-9f36-03b67cdf2e1b

여기 아주 새로운 그리고 난 정말 그들이 구조 주석에 대해 이야기 지시를 이해하지 ...

내가 생성 된 SQL 스크립트를 통해 이동하고 각 줄을 변경하지만 난 오히려 그렇게 할 수 있습니다 ...

해결법

  1. ==============================

    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. ==============================

    2.TiraggoEdmx에 대한 NuGet 모양에서, 그것은 아주 좋은 방법으로 EDMX 파일에서 모든 낮은 수준의 정보를 제공합니다. http://brewdawg.github.io/Tiraggo.Edmx/ 참조

    TiraggoEdmx에 대한 NuGet 모양에서, 그것은 아주 좋은 방법으로 EDMX 파일에서 모든 낮은 수준의 정보를 제공합니다. http://brewdawg.github.io/Tiraggo.Edmx/ 참조

  3. 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