#entity-framework-4 #t4 #self-tracking-entities
#entity-framework-4 #t4 #самоотслеживающиеся объекты
Вопрос:
При попытке сгенерировать объекты самоконтроля с помощью Visual Studio 2010 я получаю следующую ошибку:
Компиляция преобразования:
‘Microsoft.VisualStudio.TextTemplatingFD3088D2F02A7E80E5DF5FEC4C1DAB39.GeneratedTextTransformation.MetadataTools’ не содержит определения для ‘NeedsHandleCascadeDeleteMethod’ и никакого метода расширения ‘NeedsHandleCascadeDeleteMethod’, принимающего первый аргумент типа ‘Microsoft.VisualStudio.TextTemplatingFD3088D2F02A7E80E5DF5FEC4C1DAB39.GeneratedTextTransformation.удалось найти MetadataTools (вам не хватает директивы using или ссылки на сборку?)
Я использовал функцию самоотслеживающихся объектов в других проектах и раньше не сталкивался с этой проблемой. Единственное, о чем я могу думать, это о том, что я применил пакет обновления 1 к Visual Studio. Есть ли обновленный шаблон, который мне нужно установить, или мне следует просто удалить пакет обновления 1?
Спасибо!
Ответ №1:
Я установил шаблон STE задолго до обновления до версии 2010 SP1, и у меня нет этой проблемы.
Проверьте определение NeedsHandleCascadeDeleteMethod
в EF.Utility.CS.ttinclude
. Вы найдете этот файл в C:Program Files (x86)Microsoft Visual Studio 10.0Common7IDEExtensionsMicrosoftEntity Framework ToolsTemplatesIncludes
(если вы использовали путь установки по умолчанию для VS). Метод должен быть определен как:
/// <summary>
/// True if this entity type requires the HandleCascadeDelete method defined and the method has
/// not been defined on any base type
/// </summary>
public bool NeedsHandleCascadeDeleteMethod(ItemCollection itemCollection, EntityType entity)
{
bool needsMethod = ContainsCascadeDeleteAssociation(itemCollection, entity);
// Check to make sure no base types have already declared this method
EntityType baseType = entity.BaseType as EntityType;
while(needsMethod amp;amp; baseType != null)
{
needsMethod = !ContainsCascadeDeleteAssociation(itemCollection, baseType);
baseType = baseType.BaseType as EntityType;
}
return needsMethod;
}
Также проверьте свой шаблон STE, используемый в проекте (часть для объектов, а не часть для контекста). Он должен использовать метод только один раз, вызывая:
// If this entity type participates in any relationships where the other end has an OnDelete
// cascade delete defined, or if it is the dependent in any identifying relationships, it needs
// an event handler to handle notifications that are fired when the parent is deleted.
if (ef.NeedsHandleCascadeDeleteMethod(ItemCollection, entity))
{
Если вы видите что-либо еще, ваш шаблон, вероятно, каким-то образом поврежден или вы его изменили. Попробуйте установить его снова.
Комментарии:
1. Я проверил шаблон, и в том, который у меня есть, нет метода, описанного выше. Поэтому я удалил свою копию VS с помощью средства удаления, предоставленного Microsoft (не того, что с VS). Я также удалил папки VS 10.0, как описано выше, затем переустановил VS. Во вновь установленном шаблоне по-прежнему отсутствует метод, упомянутый выше. У нас есть корпоративная лицензия от Microsoft, и я использую VS 2010 Ultimate версии 10.0.20219.1 RTMRel. Я узнал, что существует пакет обновления 1 для VS Ultimate, но я решил не пытаться установить его прямо сейчас, поскольку у меня истекают сроки.