gpt4 book ai didi

c# - 如何为将来可能发生变化的数据库表设计数据访问层?

转载 作者:搜寻专家 更新时间:2023-10-30 20:29:03 25 4
gpt4 key购买 nike

简介:

在我当前的实习期间,我正在重构(几乎是重写)遗留应用程序。这个问题将关注的部分是它使用的数据库以及它们从中检索数据的方式。

数据库结构是:

  1. 有一个包含主要记录的表格。假设每条记录都是一个测量值。它有一些关于被测 Material 的信息和不同的测量信息。
  2. 他们使用的 TableView 具有相同的信息列,外加一些包含根据给定测量值计算的数据的额外列。它还会过滤表中的一些数据。

假设我们有包含列的主表:

Measurement ID
Measurement A
Measurement B

View 有这样的东西:

Measurement ID
Measurement A
Measurement B
Some extra data (for example Measurement A * Measurement B)

负责开发的人只会一些SQL,所以他喜欢在主表中添加由某些列计算的新列进行实验。这绝对是目前的需要

要求是:

  1. 应支持不同类型的数据库(例如 SQL Server、Oracle,可能还有其他一些)。
  2. 前端应该能够显示 View ,这意味着即使一些主要列始终保持不变,也可能有一些新列包括新计算的值。

我的问题是:

我应该使用什么样的系统来适应这个应用程序的需要?我想使用 Entity Framework,但我认为 View 将来可能会有新列这一事实是一个问题。据我所知,我应该在编译之前将我的类映射到数据库。

我正在考虑的另一件事可能是使用 Entity Framework 从主表获取数据,并直接在前端执行当前在 TableView 中完成的计算和过滤,并完全跳过 View 。这听起来不错,但我不知道他们是否允许我这样做。

如果是我,你会怎么做?请注意,我几乎没有使用数据库和 ORM 的经验。

最佳答案

您是正确的,如果底层数据库模式总是在变化,那么使用 Entity Framework 将是一个问题。每次获取这些新列时,您都需要更新 EF 模型。

理想情况下,您所有的数据库访问都隐藏在 DAL 接口(interface)的后面,这样您的应用程序就不需要知道正在使用哪个 ORM(如果有的话)或它连接到哪个数据库。

我不想这么说,但考虑到您的要求,ORM 可能没有意义。您可能想要使用更通用的东西而不需要任何强类型。您可以简单地始终将 DataTable 返回到您的应用程序层,它可以遍历列和值以显示返回的任何内容。如果您知道某些字段永远不会改变,您可以为这些字段创建一个手动映射,只映射到您的应用程序对象中。

关于c# - 如何为将来可能发生变化的数据库表设计数据访问层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15958212/

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