C# 在多层应用程序中使用EF和连接的POCO

C# 在多层应用程序中使用EF和连接的POCO,c#,entity-framework,ef-code-first,ioc-container,poco,C#,Entity Framework,Ef Code First,Ioc Container,Poco,我正在开发一个多层桌面应用程序(Onion架构),使用WinForm项目作为UI,我首先使用EF code访问我的DB,对于我的域模型,我想使用POCOs,因此我有两个选择: 已连接的POCOs 断开连接的POCOs 如果我使用断开连接的POCOs,我必须在EF之外做很多事情,并且不使用EF功能,因为: 我必须在客户端保存和管理实体的状态 当我想将更改保存到数据库时,我必须同步客户端POCO的状态 使用DbContext实体的状态 在将POCOs添加到新创建的DbContext期间,我必须

我正在开发一个多层桌面应用程序(Onion架构),使用
WinForm
项目作为
UI
,我首先使用
EF code
访问我的
DB
,对于我的域模型,我想使用
POCO
s,因此我有两个选择:

  • 已连接的
    POCO
    s
  • 断开连接的
    POCO
    s
如果我使用断开连接的
POCO
s,我必须在EF之外做很多事情,并且不使用EF功能,因为:

  • 我必须在客户端保存和管理实体的
    状态
  • 当我想将更改保存到数据库时,我必须同步客户端
    POCO
    状态
    使用
    DbContext
    实体的
    状态
  • 在将
    POCO
    s添加到新创建的
    DbContext
    期间,我必须控制 防止将具有相同键的两个实体添加到
    DbContext
因此,使用Connected
POCO
s似乎很正常,但在这种情况下,我认为我面临以下挑战:

  • 如果我想在多用户中使用
    IoC
    容器管理我的
    DbContext
    的生存期 环境,并使所有用户的
    DbContexts
    始终处于活动状态 将
    POCO
    s保存回对DB的更改需要花费大量时间 我认为服务器内存太多,而且效率不高
  • 我想在一个事务中保存以下实体的相关图表
我有以下问题:

  • 如何在我的多层应用程序中使用已连接的
    POCO
    s
  • 在我的情况下,我应该使用哪个配置来管理使用
    IoC容器的
    DbContext
    s的生存期
  • 有没有办法生成(或更改)总图(在客户端),然后将其传递到
    DbContext
    中保存
  • 有没有实现这种情况的示例

  • 对于列表中的第3项,您可以在此处投票支持更好地使用断开连接的实体:(您可以查看此处讨论的第三方解决方案)