gpt4 book ai didi

asp.net - 带有自定义模型和 OData 的 Entity Framework 5 - Web API

转载 作者:行者123 更新时间:2023-12-04 05:13:58 25 4
gpt4 key购买 nike

我正在为新的 Web 应用程序评估一些技术。其中应该使用 EF5 和 Knockout JS 和 Web API。我想在返回 IQueryable 时利用 OData 功能,但目前遇到了问题,如何将我的 EF 模型转换为我的业务模型。

据我所知,如果我想要一个更复杂的数据库(计算列、存储过程等),我应该使用 DB First 方法。 (如果我错了,请纠正我)

因为我需要使用 DB-First 方法并希望我的模型独立于 DB,所以我需要在 EF-Models 之外创建它们。当我从 DataLayer 返回我的业务模型作为 IQueryable 时,我失去了直接在 DB 上执行其他查询的可能性,而是直接在 ASP.Net 服务器上执行它们。

当然,我不打算在 OData 上运行复杂的查询,并且无论如何都会将它们作为附加操作来实现,但是在速度较慢的客户端(智能手机,...)上限制返回的数据并直接在服务器。

有没有办法摆脱这种困境,仍然能够使用 OData?

问候
彼得

最佳答案

您可以尝试使用 Code First 和 EF 迁移来创建/升级数据库。通过迁移,您可以创建自定义迁移,这些迁移可以只是 SQL 脚本,以实现 Code First 本身无法自动完成的任务。数据库优先方法也很好。

问问自己是否真的想要/需要支持多个后端。使用 EF 是可能的,但很难维护。在这种情况下,我假设您的概念模型 (csdl) 对于所有数据库都是相同的,但您将拥有多个存储特定模型(ssdl 文件)。由于您的模型对于所有数据库都是相同的,因此无论您使用什么数据库,您都将拥有相同的 C# 类型。

当支持多个数据库时,您将无法对数据库运行 SQL 查询(或者更具体地说,如果您对另一个数据库运行特定于一个数据库的 SQL 查询,您将获得异常),但理想情况下您不应该需要它。在最坏的情况下,您可以将要在 SQL 中编码的逻辑包含在所有数据库中都存在的存储过程中。同样,我不知道什么时候需要这样做(唯一想到的是性能),但由于您计划使用 OData,除非您开始使用服务操作,否则无论如何都无法运行这些查询。

由于无论数据库如何,您的概念模型都是相同的,因此无论数据库如何,您都将拥有相同的类型。您可以尝试将这些用于数据层和业务模型(特别是如果您使用 POCO)。另一种方法是使用 POCO/DTO。 (我没有尝试过 Web API 中的 OData 支持,但是使用 WCF 数据服务,服务本身实际上会使用 EF 类型,因此您甚至无法告诉服务使用不同的类型集)。

关于asp.net - 带有自定义模型和 OData 的 Entity Framework 5 - Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14543179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com