【发布时间】:2019-11-07 00:23:35
【问题描述】:
我正在尝试分离我的 C# WPF 应用程序的数据库部分,以便我可以在多个项目中使用它,但如果不在某处重复代码,我无法弄清楚如何做到这一点。
当前状态:
- Windows 桌面 WPF 应用程序,单个解决方案中的单个项目
- 项目在 NuGet 中安装了 EntityFramework 6.3 包
- SQL Server Express 在同一台笔记本电脑上运行
- 数据库直接在
SSMS中设计,并通过以下过程逆向工程为POCOs:Add -> 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