【问题标题】:Entity Framework and WCf实体框架和 Wcf
【发布时间】:2010-04-23 21:51:25
【问题描述】:

我对使用 EF 设计 WCf 服务有点困惑。

当使用 WCf 和 EF 时,我们在哪里画出这条线,哪些属性要返回,哪些不能返回实体。

这是我的场景

我有用户。 这是关系。

用户 [1 对多] 地址、用户 [1 对多] 电子邮件、用户 [1 对多] 电话

所以现在在 webform 上的 page1 上,我可以编辑用户信息。假设我可以编辑用户实体上的一些属性,还可以编辑地址、电话、电子邮件实体[比如添加/删除和更新任何]

在 page2 上,我只能更新用户属性,而不能更新与导航属性 [地址、电子邮件、电话] 相关的任何内容。

所以当我返回用户实体 [ OR DTO] 时,我是否也应该返回导航属性?或者客户端是否应该多次调用以获取导航属性。 此外,它如何与保存?比如客户端应该多次调用来保存用户和相关实体还是只调用一次来保存图形?

假设我只有一个 Save(User user) [其中用户也拥有所有相关实体] page1 和 page2 都会调用 save 并将用户传递给我。但一页1我需要更多的信息。但在 page2 上,我只需要用户原始属性。

所以我的问题是,我们在哪里画这条线,我们如何设计这些服务? WCF 操作是否设计在页面及其所具有的字段上?

我希望我能很好地解释我的问题。

【问题讨论】:

    标签: wcf entity-framework entity


    【解决方案1】:

    一个经典问题 - 一个没有一个正确答案的问题 - 一如既往,这取决于:-)

    核心问题是:我是检索用户及其所有相关信息(可能使其成为正在传输的大量数据),还是在需要时进行多次调用以检索某些信息部分。

    我通常更倾向于第二个选项 - 现在只检索尽可能多的数据 - 如果你真的需要,再返回获取更多数据。

    根据我的经验,用户通常只会使用您应用的某些方面 - 因此在某些情况下,有人可能需要核心用户信息以及地址。在另一种情况下,另一个用户需要核心用户信息和他们的许可——或者其他什么。几乎不会有人需要所有可用数据。

    如果您“按需”加载,加载数据确实会产生一些额外的开销和时间 - 但通常情况下,您会节省大量传输最终不需要的数据的时间(当您一次加载所有内容)。

    再次重申:这实际上只是我的应用程序中的一种“趋势”——我没有任何冷酷的数字来支持我的观察并证明这是正确的方法。对于大多数情况,这只是我自己的“最佳实践”。

    但同样:得到这个正确的边界黑魔法:-)所以你可能只需要尝试一种方法,看看它是否有效(或无效),然后一旦你有一些关于如何如何的事实,可能会重新构建你的解决方案您的解决方案适用于现实生活。

    【讨论】:

    • 好的,你已经回答了我一半的问题。 Save 方法的效果如何。这种保存方法应该采用整个图表 [我希望绝对不会] 还是只采用与您计划更新的表单或数据相关的数据。
    • 如果您以小块的形式检索数据,我认为您也应该将其保存在类似的小块中。只保存那些实际上有任何变化的部分——如果只有一个电话号码发生了变化等,不要保存一个巨大的图表。
    • 例如在第 1 页我用地址保存用户,一个第 2 页只有用户,在第 ​​3 页我用地址和电话保存用户,然后我应该公开三种不同的服务方法来保存吗?像 SaveUser SaveUserAndAddress SaveUserAddressandPhone ???
    • 有一个SaveUser(User),一个用于SaveUserAddress(UserID, Address),可能还有一个用于SaveUserPhones(UserID, Phones) - 是的,为什么不呢?您可以对此进行优化并使其运行良好。将其打包到一个处理所有这些调用的UserRepository 类中,并且只调用那些你真正需要调用的方法(如果你有任何更改,需要保存)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多