EF 4 Шаблон ошибки генератора самопроверкаемых объектов не содержит определения для NeedsHandleCascadeDeleteMethod - PullRequest
2 голосов
/ 06 апреля 2011

При попытке создать объекты самоконтроля с использованием Visual Studio 2010 я получаю следующую ошибку:

Компиляция преобразования:

'' Microsoft.VisualStudio.TextTemplatingFD3088D2F02A7E80E5DF5FEC4C1DAB39.GeneratedTextTransformation.MetadataTools не содержит определения для 'NeedsHandleCascadeDeleteMethod' и нет метода расширения 'NeedsHandleCascadeDeleteMethod' принимая первый аргумент типа 'Microsoft.VisualStudio.TextTemplatingFD3088D2F02A7E80E5DF5FEC4C1DAB39.GeneratedTextTransformation.MetadataTools' может быть найден (вы пропускаете используя директиву или сборку ссылка?)

Я использовал функцию самопроверки объектов в других проектах, и у меня не было этой проблемы раньше. Единственное, о чем я могу думать, это то, что я применил SP1 к Visual Studio. Есть ли обновленный шаблон, который мне нужно установить, или я должен просто удалить SP1?

Спасибо!

1 Ответ

1 голос
/ 07 апреля 2011

Я установил шаблон STE задолго до обновления до VS 2010 SP1, и у меня нет этой проблемы.

Проверьте определение NeedsHandleCascadeDeleteMethod в EF.Utility.CS.ttinclude.Вы найдете этот файл в C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes (если вы использовали путь установки по умолчанию для 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 && 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))
{

Если вы видите что-то еще, ваш шаблон, вероятно, каким-то образом поврежден или вы изменили его.Попробуйте установить его снова.

...