“Информация о метаданных, не найденная” при использовании EF4 ПОСТЕПЕННО Шаблон?

Для создания такого поведения не будет хорошей практикой в ​​пользовательском интерфейсе, вы должны попробовать использовать AJAX, если хотите уведомить сервер, как только будет установлен флажок. Или просто используйте html-форму, если вы хотите отправить ответ другим элементам в виде связки на сервер.

На всякий случай, если вы все еще хотите достичь функциональности, ваш предыдущий код не будет работать, поскольку по мере перезагрузки страницы, весь дом перезагружается. Это может быть достигнуто с помощью файлов cookie или localstorage, в которых вы можете установить флажок или значение (в целом) для прокрутки. При загрузке страницы проверьте, установлено ли какое-либо значение этой конкретной переменной cookie или localStorage, а затем прокрутите до заданного значения. Обратите внимание, что это очень плохая практика с точки зрения пользовательского интерфейса. Я настоятельно рекомендую вам использовать ajax или отправить значения вместе с помощью формы.

23
задан ladenedge 11 February 2010 в 11:35
поделиться

5 ответов

Недавно я снова столкнулся с этой же ошибкой при перемещении файла EDMX в новое место в решении. По-видимому, существует несколько различных пространств имен при работе с EDMX-файлами. Есть пространство имен, которое вы вводите с помощью мастера при создании начального EDMX-файла (N1), другое, которое появляется в SSDL и выглядит примерно так (N2):

<Schema Namespace="..." ..

Затем есть пространство имен сгенерированного кода, которое можно (опционально) указать в дизайнере (N3), и, наконец, есть скрытые пространства имен ресурсов, которые компилируются в вашу конечную сборку (N4).

Насколько я могу судить, пространство имен N2 действительно актуально только в SSDL. Я полагаю, что это пространство имен начинается как N1 - то, которое вы изначально вводите в мастере.

Аналогично, пространство имен N3 имеет значение только в том смысле, в каком обычно используются пространства имен в C#.

А вот проблемная часть. Пространства имен категории N4 являются функцией каталога, в котором находится ваш EDMX (относительно каталога вашего проекта). Вы можете подумать: "Ну и что? Оказывается, эти пространства имен также упоминаются в вашем файле App.config! В частности, ищите часть, подобную этой:

connectionString="metadata=res://*/Database.Master.csdl|...

Та часть, где написано "Database.Master.csdl" - это имя вашего CSDL-ресурса. Если эти имена ресурсов рассинхронизированы, вы получите ошибку, подобную приведенной выше, или, возможно:

Указанное по умолчанию имя EntityContainer '[name]' не может быть найдено в информации отображения и метаданных.

Простым решением является изменение вашего App.config, чтобы указать правильное имя ресурса для каждой части вашего отображения EF (CSDL, SSDL и MSL). Если вы не уверены в точности этих имен, проверьте ресурсы вашей скомпилированной сборки в ILSpy или dotPeek.

27
ответ дан 29 November 2019 в 02:11
поделиться

Я расширяю NopCommerce , создав отдельный проект и edmx внутри него. Шаблоны POCO используются для генерации моего пользовательского ObjectContext класса-потомка.

Я проверил все свойства, все пространства имен и все еще получал вышеупомянутое исключение.

Задача состояла в том, чтобы удалить файл MyModel.Designer.cs , который сгенерировал другой класс-потомок ObjectContext (с другим именем и внутри другого пространства имен).

1
ответ дан Kniganapolke 29 November 2019 в 02:11
поделиться

У нас та же проблема, когда мы не используем модель edmx, мы используем EF powertools beta 2 с первой функцией кода обратного инжиниринга для генерации наших сущностей, контекста и представлений.

и у нас странное поведение, что в команде на нескольких машинах хэш для сгенерированных скомпилированных представлений отличается, а затем при сборке команды TFS, такой же, как на других машинах, мы получаем исключение, подобное следующему. Вопрос основан на том, какие мощные инструменты генерируют хэш для скомпилированных представлений? и что мы можем изменить, так это то, что оно совместимо, мы используем мощные инструменты бета 2 с EF 4.3.1, system.data .v4.0.30319, против базы данных Oracle с использованием драйверов оракула devart.

контекст генерирует представления

// ------------------------------------ ------------------------------------------

//

// Этот код был сгенерирован инструментом.

// Runtime Version: 4.0.30319.551

// Изменения в этом файле могут привести к некорректному поведению и будут потеряны при регенерации кода.

//

// ------------------------------------- -----------------------------------------

[сборка: System.Data.Mapping.EntityViewGenerationAttribute (TypeOf (Edm_EntityMappingGeneratedViews.ViewsForBaseEntitySetsC6473E0A11A196A36CC5839589DE2DE553F202E361016A89F2142797168B2534))]

Пространство имен Edm_EntityMappingGeneratedViews

{

/// <Summary>

/// The type contains views for EntitySets and AssociationSets that were generated at design time.

/// </Summary>

public sealed class ViewsForBaseEntitySetsC6473E0A11A196A36CC5839589DE2DE553F202E361016A89F2142797168B2534 : System.Data.Mapping.EntityViewContainer

{

    /// <Summary>

    /// The constructor stores the views for the extents and also the hash values generated based on the metadata and mapping closure and views.

    /// </Summary>

    public ViewsForBaseEntitySetsC6473E0A11A196A36CC5839589DE2DE553F202E361016A89F2142797168B2534()

    {

        this.EdmEntityContainerName = "Context";

        this.StoreEntityContainerName = "CodeFirstDatabase";

        this.HashOverMappingClosure = "2c6bbce22db7c9c65f8a70c5a1bae1225522a2124aad50e74bdc186ce8c70508";

        this.HashOverAllExtentViews = "26cad9d7334571a0116f89413345d00ec8e031706228df6e653c7b6396c94591";

        this.ViewCount = 56;

    }

исключение:

система. Data.EntityCommandCompilationException: System.Data.EntityCommandCompilationException: при подготовке определения команды произошла ошибка. Смотрите внутреннее исключение для деталей. ---> System.Data.MappingException: информация о сопоставлении и метаданных для EntityContainer 'Context' больше не соответствует информации, используемой для создания предварительно сгенерированных представлений.

1
ответ дан dumian 29 November 2019 в 02:11
поделиться

У меня была похожая проблема при интеграции различных проектов.
Проблема заключалась в том, что у меня было больше одного edmx, так как у меня было много проектов.

Строка подключения была такой же, но пространство имен было другим.

Чтобы решить эту проблему, выберите одно из используемых подключений и измените другие.
Помните, что вам нужно будет внести изменения в файл designer.cs, а также в XML-файл.

1
ответ дан Andy Hayden 29 November 2019 в 02:11
поделиться

Не уверен насчет этого ... он действительно кажется немного странным, так что это маловероятно.

Но иногда помогает случайный вызов ObjectContext.MetadataWorkspace.LoadFromAssembly ().

И даже если это не так, существует вторая перегрузка, обеспечивающая вывод в стиле трассировки.

т.е.

Assembly assembly = typeof(AnnouncementText).Assembly;
context.MetadataWorkspace.LoadFromAssembly(
    assembly, 
    (message) => Console.WriteLine(message)
);
foreach(var at in context.AnnouncementTexts)
   ...

И посмотрите, какие сообщения вы получите (если есть).

Надеюсь, это поможет

Alex

2
ответ дан 29 November 2019 в 02:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: