我如何改变StoreGeneratedPattern并强制实体框架生成具有身份的插入语句

本文关键字:框架 身份 语句 插入 实体 何改变 改变 StoreGeneratedPattern | 更新日期: 2023-09-27 18:05:59

我有服务器和客户端数据库,我需要保持一些服务器数据与客户端数据库同步。数据库模式是相同的,除了在服务器上有IDENTITY(1,1)。

数据只能在服务器上创建。它必须在客户端使用服务器的id插入。

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实体。类很简单,通过id而不是NavigationProperties来引用。

谢谢

我如何改变StoreGeneratedPattern并强制实体框架生成具有身份的插入语句

我找到了一个解决方案,这将使我从相同的解决方案运行客户端和服务器,但它是非常黑客,我会尽量避免。我将更好地改变int的GUID在代码中生成,因此删除StoreGeneratedPattern="Identity"服务器。

解决方案是在我的客户项目上有一个构建后事件,它做:

  1. 删除StoreGeneratedPattern="Identity"从我的EDMX文件在目标类
  2. 构建包含EDMX文件的项目。
  3. 将dll复制到客户端项目。
  4. 还原原始服务器dll和edmx文件

有更好的解决方案吗?您可以看到我愿意走多远,所以GUID对我来说似乎是一个更好的解决方案。

我的最终解决方案是删除双方(客户端/服务器)的StoreGeneratedPattern="Identity",并在插入到DB之前在代码中生成对象Id。这样我的代码可以保持客户端/服务器无关,只创建默认值的ID。