【问题标题】:Entity Framework: How to have several entites in model for same table in database?实体框架:如何在模型中为数据库中的同一张表创建多个实体?
【发布时间】:2023-03-15 11:41:02
【问题描述】:

我是实体框架的新手,我已阅读实体框架文档,其中谈到了 Conceptual ModelLogical Model

我在想我的模型中的实体是否应该与数据库表匹配?我想答案是否定的。但我想知道如何实现以下场景:

我想要一个用于更新表的实体,并有另一个用于从该表中读取的实体。例如。我想要一个名为 EditStudent 的实体和另一个名为 ViewStudent 的实体,其中不同的字段来自我的数据库中的表 Student

然后当我更新 EditStudent 字段时,我可以提交对 Student 表上这些字段的更改。

这怎么可能?此外,我的场景是 Entity Framework 中的一种常见做法,还是每个数据库表都有一个实体很常见?

【问题讨论】:

  • 可能,但我认为你看错了。您需要制作 Student 模型,然后您可以在代码的业务逻辑端的 EditStudent 和 ViewStudent 版本中使用它。
  • 可以使用ViewModel,先创建实体类再创建CRUD ViewModel并使用。
  • 我在想我的模型中的实体是否应该与数据库表匹配?我想答案是否定的。 恰恰相反。除了小例外(表拆分、TPH/TPT/TPC 层次结构、与隐式联结表的多对多关系),EF 实体模型基本上是一个存储模型,即匹配数据库表。

标签: c# entity-framework ado.net-entity-data-model


【解决方案1】:

通常在处理数据库时有多个抽象级别。

使用实体框架时,您经常会使用Repository Pattern。如果你用谷歌搜索,你会发现很多解释。

你会发现两个层(不确定层的名称是否到处都在使用)

  • 数据库层。这表示数据库中的表以及表之间的关系。在 Entity Framework 中,这是您的 DbContext 及其 DbSet。每个 DbSet 都是一个表,包含列和列上的约束。存储在 DbContext 中的模型表示表之间的关系:一对多、多对多、哪些键用作外键等。
  • 存储库层代表您希望在数据库层上执行的操作。它隐藏了您正在使用的数据库方法。存储库层的用户不应该知道该层是使用实体框架还是其他方法来访问数据库。事实上,它不一定是数据库。对于存储库层的用户,数据可以是 Excel 电子表格文件。

如果你遵循这个划分,你的 DbContext 应该代表你的数据库。您计划使用此数据库的方式不在您的 DbContext 中。

可编辑学生可查看学生的概念通常来自存储库层。它们都将访问 DbContext 中的 Student 表,但一种类型可能只返回具有公共 get 函数的接口,而另一种类型将具有更改 Student 数据的功能。两者都将在同一个 DbContext 中使用同一个表。

【讨论】:

    猜你喜欢
    • 2019-03-27
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    相关资源
    最近更新 更多