【问题标题】:How can I change StoreGeneratedPattern and force Entity Framework to generate insert statement with identity如何更改 StoreGeneratedPattern 并强制实体框架生成具有标识的插入语句
【发布时间】:2011-08-16 14:27:42
【问题描述】:

我有服务器和客户端数据库,我需要在其中保持一些服务器数据与客户端数据库同步。除了在服务器上有 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 引用。

谢谢

【问题讨论】:

    标签: c# entity-framework synchronization identity


    【解决方案1】:

    我找到了一种解决方案,它可以让我从同一个解决方案运行客户端和服务器,但它非常老套,我会尽量避免。我会更好地将 int 更改为在代码中生成的 GUID,然后删除 StoreGeneratedPattern="Identity" 服务器。

    解决方案是在我的 CLIENTs 项目上进行构建后事件:

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

    有没有更好的解决方案?你看我愿意走多远,所以 GUID 对我来说似乎是一个更好的解决方案。如果我遗漏了什么,请告诉我。

    【讨论】:

      【解决方案2】:

      我的最终解决方案是删除两侧(客户端/服务器)的 StoreGeneratedPattern="Identity" 并在插入数据库之前在代码中生成对象 ID。这样我的代码可以保持客户端/服务器不可知,并且只为默认值创建 ID。

      【讨论】:

        猜你喜欢
        • 2023-03-10
        • 1970-01-01
        • 2021-05-17
        • 2015-07-27
        • 2011-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-10
        相关资源
        最近更新 更多