Сначала добавьте документацию в сгенерированный код в модели структуры объекта

Впервые я использую модель Entity Framework с VS 2010. Когда я строю свой проект, EF генерирует файл Model.Designer.cs, содержащий все сущности. Этот файл конструктора также содержит документацию, добавленную к объектам в файле EDMX.

Когда я создал новый проект модели EF в VS 2012, файл Model.tt был добавлен в мой файл EDMX. Этот шаблон T4 генерирует один файл для каждой сущности в моей модели. К сожалению, документация из файла EDMX не используется в сгенерированном коде.

Мне действительно нравится документировать мою модель, поэтому IntelliSense обнаруживается при ее использовании. Единственный обходной путь, который я нашел, - это удалить Model.tt и сгенерированные файлы классов и снова включить генерацию кода для моего файла EDMX. Это возвращает нас к поведению, которое я использовал в VS 2010. Однако я бы предпочел иметь отдельный файл для каждой сущности.

Есть ли способ (желательно с использованием инструментов VS и без необходимости изменять какие-либо файлы, поставляемые с VS), чтобы включить документацию из файла EDMX в сгенерированные файлы одного класса?

Изменить: Чтобы проиллюстрировать мою проблему, вот быстрый пример.

Допустим, моя модель выглядит так:

Я выделил ту часть, в которую я ввел документацию, в окне «Свойства» свойства Id.

Вот как выглядит объект в файле EDMX:

    <EntityType Name="Entity1">
      <Key>
        <PropertyRef Name="Id" />
      </Key>
      <Property Type="Int32" Name="Id" Nullable="false" annotation:StoreGeneratedPattern="Identity" >
        <Documentation>
          <Summary>This is documentation for the ID property.</Summary>
        </Documentation>
      </Property>
    </EntityType>

Сгенерированный класс (Entity1.cs) от Model.tt выглядит так:

public partial class Entity1
{
    public int Id { get; set; }
}

Но когда я включаю генерацию кода для моей модели, вот как выглядит объект в Model.Designer.cs:

/// <summary>
/// No Metadata Documentation available.
/// </summary>
[EdmEntityTypeAttribute(NamespaceName="Model1", Name="Entity1")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class Entity1 : EntityObject
{
    #region Factory Method

    /// <summary>
    /// Create a new Entity1 object.
    /// </summary>
    /// <param name="id">Initial value of the Id property.</param>
    public static Entity1 CreateEntity1(global::System.Int32 id)
    {
        Entity1 entity1 = new Entity1();
        entity1.Id = id;
        return entity1;
    }

    #endregion

    #region Simple Properties

    /// <summary>
    /// This is documentation for the ID property.
    /// </summary>
    [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
    [DataMemberAttribute()]
    public global::System.Int32 Id
    {
        get
        {
            return _Id;
        }
        set
        {
            if (_Id != value)
            {
                OnIdChanging(value);
                ReportPropertyChanging("Id");
                _Id = StructuralObject.SetValidValue(value, "Id");
                ReportPropertyChanged("Id");
                OnIdChanged();
            }
        }
    }
    private global::System.Int32 _Id;
    partial void OnIdChanging(global::System.Int32 value);
    partial void OnIdChanged();

    #endregion

}

Итак, вы видите: Model.Designer.cs содержит мою пользовательскую строку документации «Это документация для свойства ID». в то время как Entity1.cs нет. Однако Model.Designer.cs может стать довольно большим, если в нем много сущностей, а отладка в этом файле несколько медленная. Я бы предпочел иметь несколько небольших файлов (по одному на сущность), но при этом сохранить документацию из файла EDMX в сгенерированном коде.

Ответы на вопрос(1)

Ваш ответ на вопрос