StoreGeneratedPattern T4 EntityFramework концерн - PullRequest
2 голосов
/ 16 декабря 2010

Вот ситуация:

Я использую SQL Server 2008 R2, репликацию SQL, Visual Studio 2010, EntityFramework 4, C # 4.

Действия наших администраторов баз данных заключаются виспользуйте столбец rowguid для репликации SQL для работы с нашей установкой.Для этих столбцов необходимо, чтобы для свойства StoreGeneratedPattern было установлено значение Computed для каждого из этих столбцов.

Проблема:

Каждый раз, когда шаблон T4 регенерирует наш файл EDMX (модель данных объекта ADO.NET)(например, когда мы обновляем его из нашей базы данных), мне нужно вручную перейти в файл EDMX XML, чтобы добавить это свойство к каждому из них.Это должно идти от этого:

<Property Name="rowguid" Type="uniqueidentifier" Nullable="false" />

К этому:

<Property Name="rowguid" Type="uniqueidentifier" Nullable="false" StoreGeneratedPattern="Computed"/>

Решение:

Я пытаюсь найти способ настроить ADO.NET EntityObject Generator T4 файл для генерации StoreGeneratedPattern = "Computed" для каждого моего rowguid.

Я новичок в T4, я только настраивал шаблоны AddView и AddController T4 для ASP.NET MVC 2как, например, List.tt.

Я просмотрел файл EF T4, и я не могу найти этого монстра, где я мог бы это сделать (и как).

Мое лучшее предположение где-то в этомчасть файла, строки с 544 по 618 исходного файла ADO.NET EntityObject Generator T4:

    ////////
    ////////  Write PrimitiveType Properties.
    ////////
    private void WritePrimitiveTypeProperty(EdmProperty primitiveProperty, CodeGenerationTools code)
    {
        MetadataTools ef = new MetadataTools(this);
#>

    /// <summary>
    /// <#=SummaryComment(primitiveProperty)#>
    /// </summary><#=LongDescriptionCommentElement(primitiveProperty, 1)#>
    [EdmScalarPropertyAttribute(EntityKeyProperty=<#=code.CreateLiteral(ef.IsKey(primitiveProperty))#>, IsNullable=<#=code.CreateLiteral(ef.IsNullable(primitiveProperty))#>)]
    [DataMemberAttribute()]
    <#=code.SpaceAfter(NewModifier(primitiveProperty))#><#=Accessibility.ForProperty(primitiveProperty)#> <#=code.Escape(primitiveProperty.TypeUsage)#> <#=code.Escape(primitiveProperty)#>
    {
        <#=code.SpaceAfter(Accessibility.ForGetter(primitiveProperty))#>get
        {
<#+             if (ef.ClrType(primitiveProperty.TypeUsage) == typeof(byte[]))
                {
#>
            return StructuralObject.GetValidValue(<#=code.FieldName(primitiveProperty)#>);
<#+
                }
                else
                {
#>
            return <#=code.FieldName(primitiveProperty)#>;
<#+
                }
#>
        }
        <#=code.SpaceAfter(Accessibility.ForSetter((primitiveProperty)))#>set
        {
<#+
        if (ef.IsKey(primitiveProperty))
            {
                if (ef.ClrType(primitiveProperty.TypeUsage) == typeof(byte[]))
                {
#>
            if (!StructuralObject.BinaryEquals(<#=code.FieldName(primitiveProperty)#>, value))
<#+
                }
                else
                {
#>
            if (<#=code.FieldName(primitiveProperty)#> != value)
<#+
                }
#>
            {
<#+
        PushIndent(CodeRegion.GetIndent(1));
            }
#>
            <#=ChangingMethodName(primitiveProperty)#>(value);
            ReportPropertyChanging("<#=primitiveProperty.Name#>");
            <#=code.FieldName(primitiveProperty)#> = StructuralObject.SetValidValue(value<#=OptionalNullableParameterForSetValidValue(primitiveProperty, code)#>);
            ReportPropertyChanged("<#=primitiveProperty.Name#>");
            <#=ChangedMethodName(primitiveProperty)#>();
<#+
        if (ef.IsKey(primitiveProperty))
            {
        PopIndent();
#>
            }
<#+
            }
#>
        }
    }
    private <#=code.Escape(primitiveProperty.TypeUsage)#> <#=code.FieldName(primitiveProperty)#><#=code.StringBefore(" = ", code.CreateLiteral(primitiveProperty.DefaultValue))#>;
    partial void <#=ChangingMethodName(primitiveProperty)#>(<#=code.Escape(primitiveProperty.TypeUsage)#> value);
    partial void <#=ChangedMethodName(primitiveProperty)#>();
<#+
    }

Любая помощь приветствуется.Заранее спасибо.

РЕДАКТИРОВАТЬ: еще не нашли ответа на эту проблему, если у кого-то есть идеи, чтобы автоматизировать это, будет очень признателен.

1 Ответ

0 голосов
/ 17 декабря 2010

Этот шаблон отвечает за генерацию кода C #.Это не повлияет на генерацию XML модели.
Попробуйте связаться с Microsoft по вопросу регенерации хранилища.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...