【问题标题】:Using the same database-generated EF entities in multiple projects在多个项目中使用相同的数据库生成的 EF 实体
【发布时间】:2019-11-07 00:23:35
【问题描述】:

我正在尝试分离我的 C# WPF 应用程序的数据库部分,以便我可以在多个项目中使用它,但如果不在某处重复代码,我无法弄清楚如何做到这一点。

当前状态:

  • Windows 桌面 WPF 应用程序,单个解决方案中的单个项目
  • 项目在 NuGet 中安装了 EntityFramework 6.3
  • SQL Server Express 在同一台笔记本电脑上运行
  • 数据库直接在SSMS中设计,并通过以下过程逆向工程为POCOsAdd -> New Item -> Data -> ADO.NET Entity Data Model -> Code First from Database -> Choose connection string -> Choose database objects。这将创建一个 .edmx 文件,其中包含一些其他文件,包括一个 .tt 文件,我可以展开该文件以查看我的所有实体
  • 在极少数需要更改数据库的情况下,我在SSMS 中进行,然后再次按照上述过程更新应用程序中的对象

此应用程序运行良好。但我想分离数据库,以便它可以在另一台机器上运行,无论是在我家还是在云中,这样我就可以编写基于 Web 或移动客户端的客户端,这些客户端使用来自另一个位置的相同数据库。但是,我无法弄清楚如何在不引入其他问题的情况下从 WPF 应用程序中仅删除数据库部分。

我想象这样一种情况,数据库在一台机器上运行,上面有一个 RESTful Web 服务,原始应用程序被修改为访问 Web 服务而不是直接访问数据库。

所以也许 Web 服务项目本身就是我将使用 EF6 访问数据库并将其反向工程为实体的地方,因此我可以通过 Web 服务接收实体并将它们插入/更新到数据库。这是有道理的。

在这种情况下,原始 WPF 应用程序将不再需要安装 EF6、任何连接字符串或任何与数据库相关的内容,但它仍需要了解已从数据库生成的所有实体,因为在调用 Web 服务时,它仍然必须创建这些对象来发送它们。

那么我是否应该在一个项目中从数据库中创建entities,然后将相同的entities 复制到另一个项目中?这感觉就像复制代码。如果我更改了数据库,我必须在每个项目中分别更新entities。或者我是否制作了一个"entities" 项目,我可以使用"using" 指令从其他人那里访问该项目?还是做一个类库.dll?我认为后者中的一个会起作用,但我对如何解决这个问题有点迷茫。或者这可能需要更深入的重新思考?

【问题讨论】:

  • 或者做一个类库 -- 当然!但是这个问题非常广泛。你能用(暂定的)代码把它归结为一个编程问题吗?

标签: c# wpf entity-framework


【解决方案1】:

如果我理解正确的话……

您可以在单独的类库中创建模型引用,并将该库用作 WPF 中的引用或您想要的任何地方,请记住,连接将发生在程序运行的地方,例如您的 wpfApp 或 webapi,所以您有将所有配置设置放在“入口点”中。

【讨论】:

    猜你喜欢
    • 2014-07-27
    • 2020-05-14
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多