После долгих исследований и обращения в 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
На данный момент я понятия не имею, в чем может быть проблема.
Любая помощь будет принята с благодарностью!
Заранее большое спасибо.