Я использую модель 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 в сгенерированном коде.