Сначала добавьте документацию в сгенерированный код в модели структуры объекта
Впервые я использую модель 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 в сгенерированном коде.