Как я могу изменить StoreGeneratedPattern и заставить Entity Framework генерировать оператор вставки с идентификатором - PullRequest
1 голос
/ 16 августа 2011

У меня есть база данных сервера и клиента, где мне нужно синхронизировать некоторые данные сервера с данными клиента. Схема базы данных такая же, кроме IDENTITY (1,1) на сервере.

Данные могут быть созданы только на сервере. Он должен быть вставлен на клиент с использованием идентификатора сервера.

CREATE TABLE [MyServer].[dbo].[Test1](
[Test1Id] [int] IDENTITY(1,1) NOT NULL,
[Test1Value] [datetime] NOT NULL,
CONSTRAINT [PK_Test1] PRIMARY KEY CLUSTERED ( [Test1Id] ASC ) ) ON [PRIMARY]

CREATE TABLE [MyClient].[dbo].[Test1](
[Test1Id] [int] NOT NULL,
[Test1Value] [datetime] NOT NULL,
CONSTRAINT [PK_Test1] PRIMARY KEY CLUSTERED ( [Test1Id] ASC ) ) ON [PRIMARY]

Есть ли способ изменить StoreGeneratedPattern для классов сущностей, не перестраивая сборку, чтобы я мог вставить IDENTITY на стороне клиента? Я потратил некоторое время на изучение

EntityModelCodeGenerator

но безуспешно.

Конечно, я запускаю сервер и клиент в другом домене приложения, поэтому я могу сделать это при запуске.

Я использую классы EntityFramework по умолчанию. Я могу поменять на POCO, если это решит мою проблему. Классы просты и на них ссылаются идентификаторы вместо NavigationProperties.

Спасибо

Ответы [ 2 ]

0 голосов
/ 17 августа 2011

Мое окончательное решение - удалить StoreGeneratedPattern = "Identity" с обеих сторон (клиент / сервер) и сгенерировать Id объекта в коде перед вставкой в ​​БД.Таким образом, мой код может оставаться независимым от клиента и сервера и создает идентификатор только для значения по умолчанию.

0 голосов
/ 17 августа 2011

Я нашел одно решение, которое позволит мне запускать клиент и сервер из одного решения, но оно ОЧЕНЬ хакерское, и я постараюсь избежать. Я бы лучше поменял int на GUID, сгенерированный в коде, и поэтому также удаляю StoreGeneratedPattern = "Identity" сервер.

Решением было бы иметь событие пост-сборки в моем проекте КЛИЕНТОВ, которое выполняет:

  1. Удаляет StoreGeneratedPattern = "Identity" из моего файла EDMX для целевых классов.
  2. Проект сборки, содержащий файл EDMX.
  3. Копирование библиотеки DLL в проект КЛИЕНТОВ.
  4. Восстановление исходных файлов dll и edmx на сервере.

Есть ли лучшее решение? Вы видите, как далеко я хочу пойти, поэтому GUID кажутся мне лучшим решением. Позволь мне знать, если я что-то упустил.

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