Visual Studio 2010 + Entity Framework 4: UpdateException для SaveChanges - PullRequest
0 голосов
/ 29 июня 2011

После долгих исследований и обращения в Microsoft по поводу тестирования неизданного исправления для VS2010 SP1 (я думал, что попал в эту ошибку: http://connect.microsoft.com/VisualStudio/feedback/details/505178/storegeneratedpattern-property-in-ado-net-entity-model-designer-sets-cdsl-annotation-but-not-ssdl-attribute), Я думал, что поделюсь этим с вами.

По сути, мой Entity Model Designer работает хорошо, поскольку добавляет Identity в качестве правильного значения для поля StoredGeneratedPattern моего свойства ID (как в SSDL, так и в CSDL-областях файла edmx), однако при вызове context.SaveChanges. () из простого приложения, которое я создал для проверки настройки EF, я получаю исключение UpdateException со следующим InnerException (единственный значимый текст, который можно найти в любом месте объекта UpdateException):

{"Модификации таблиц, в которых столбец первичного ключа имеет свойство 'StoreGeneratedPattern', для которого установлено значение 'Computed', не поддерживаются. Вместо этого используйте шаблон 'Identity'. Столбец ключа: 'Id'. Таблица: 'ConfigurationManagerServiceEntityDataModel.Store .ServiceConfigurationItems'. "}

Это, однако, просто невозможно, поскольку Computed нигде не найти во всем решении.

Я повторно генерировал базу данных из модели много раз и исследовал как SQL, так и результирующую структуру таблицы и свойства столбцов в SQL Server Management Studio, и все выглядит просто отлично.

Для дальнейшего использования, вот спецификация edmx объекта конкретной модели, на которую, по-видимому, ссылается исключение:

SSDL:

<EntityType Name="ServiceConfigurationItems">
    <Key>
      <PropertyRef Name="Id" />
    </Key>
    <Property Name="Id" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
    <Property Name="ItemName" Type="nvarchar(max)" Nullable="false" />
    <Property Name="ParentCategoryName" Type="nvarchar(max)" Nullable="false" />
    <Property Name="VicimusService_Id" Type="int" Nullable="false" />
</EntityType>

CSDL:

<EntityType Name="ServiceConfigurationItem">
          <Key>
            <PropertyRef Name="Id" />
          </Key>
          <Property Type="Int32" Name="Id" Nullable="false" a:StoreGeneratedPattern="Identity" xmlns:a="http://schemas.microsoft.com/ado/2009/02/edm/annotation" />
          <Property Type="String" Name="ItemName" Nullable="false" />
          <Property Type="String" Name="ParentCategoryName" Nullable="false" />
          <NavigationProperty Name="VicimusService" Relationship="ConfigurationManagerServiceEntityDataModel.VicimusServiceConfigurationItem" FromRole="ConfigurationItem" ToRole="VicimusService" />
          <NavigationProperty Name="ConfigurationItemDetails" Relationship="ConfigurationManagerServiceEntityDataModel.ServiceConfigurationItemConfigurationItemDetails" FromRole="ServiceConfigurationItem" ToRole="ConfigurationItemDetails" />
        </EntityType>

И SQL для этой таблицы генерируется следующим образом:

-- Creating table 'ServiceConfigurationItems'
CREATE TABLE [dbo].[ServiceConfigurationItems] (
    [Id] int IDENTITY(1,1) NOT NULL,
    [ItemName] nvarchar(max)  NOT NULL,
    [ParentCategoryName] nvarchar(max)  NOT NULL,
    [VicimusService_Id] int  NOT NULL
);
GO

На данный момент я понятия не имею, в чем может быть проблема.

Любая помощь будет принята с благодарностью!

Заранее большое спасибо.

1 Ответ

0 голосов
/ 01 июля 2011

Ну, я сделал все это снова с нуля, и проблема больше не возникает.

Спасибо всем, кто нашел время, чтобы прочитать это!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...