在多层应用程序中管理实体状态更改的位置?

时间:2017-02-20 11:27:47

标签: c# entity-framework wcf mvvm architecture

我在.Net / C#/ EF6 / WPF / WCF中构建了一个多层应用程序。

后端是一个mysql数据库,带有一个实体框架层来访问数据库。我有一个业务逻辑层和一个外观层来公开服务。

在客户端,一个WPF / MVVM客户端。

我有3个模型,一个用于客户端(“视图域”),一个用于由实体框架(“db domain”)生成的后端,一个用于服务的dto类型。

在客户端我跟踪实体状态更改,我基本上从EntityState复制System.Data枚举,并在每次更改属性或创建新实体时设置状态。

例如,我的一项服务公开了Add(Entity e)Update(Entity e)

我是否应该决定在客户端上调用一个或另一个方法(他知道状态是Added还是Modified),还是应该公开一个名为AddOrUpdate(Entity e)的方法,让后端决定它是新实体还是更新实体?

最好的方法是什么?我应该就此做出客户端或后端方面的决定吗?

1 个答案:

答案 0 :(得分:1)

不确定为什么要让客户知道/处理对象的状态 您的问题可能是因为您在两种方法中重用“实体”类而导致的。

我认为你可以使用这样的东西:

 Add(InputResource e) 
 Update(UpdateResource e) 

以上都不应具有“州”财产* “InputResource”不应具有Id / Primary Key

我认为上述方法更清晰,但这取决于您的需求 如果你想使用“AddOrUpdate”,我仍然不认为添加一个国家是一个好主意 您可以检查Id属性,如果设置了它是一个更新,如果不是它是一个添加

*当然我在谈论你的公共API 在内部,在您的服务器(BusinessLayer-DataLayer)上,您可能有一个解决方案,根据其状态处理项目,但我不认为您正在考虑这个