gpt4 book ai didi

c# - EF 生成的类和模型之间的关系?

转载 作者:行者123 更新时间:2023-11-30 20:48:45 24 4
gpt4 key购买 nike

我正在为一个项目使用 ASP .NET MVC (C#) 和 EntityFramework(数据库优先)。

假设我在“电影详细信息”页面上,该页面显示了我数据库中一部电影的详细信息。我可以点击每部电影并编辑每一部电影。因此,我有一个 Movie 类和一个用 EF 生成的 Database.Movie 类。

我的索引操作看起来像:

    public ActionResult MovieDetail(int id)
{
Movie movie = Movie.GetInstance(id);
return View("MovieDetail", movie);
}

GetInstance 方法应该返回 Movie 类的一个实例,目前看起来像这样:

    public static Movie GetInstance(int dbId)
{
using (var db = new MoviesEntities())
{
Database.Movie dbObject = db.Movies.SingleOrDefault(r => r.Id == dbId);
if (dbObject != null)
{
Movie m = new Movie(dbObject.Id, dbObject.Name, dbObject.Description);
return m;
}
return null;
}
}

它工作正常,但这是实现它的好方法吗?是否有其他更简洁的方法来获取我的 Movie 类实例?谢谢

最佳答案

这是实现它的好方法吗?

这是一个非常主观的问题。它是有效的,并且此实现在技术上没有任何错误。对于我的小型家庭项目,我使用了类似的东西。

但对于业务应用程序,最好让您的实体与 MVC 应用程序无关。这意味着您的数据上下文 + EF + 生成的实体应该保存在一个单独的项目中(我们称之为“数据”项目),并且实际数据以 DTO 的形式传递。

因此,如果您的实体类似于这样:

public class Person {
public int Id { get; set; }
public string Name { get; set; }
}

您希望有一个能够传递该数据的等效 DTO 类:

public class PersonDTO {
public int Id { get; set; }
public string Name { get; set; }
}

这意味着您的“数据”项目只回复 DTO 类,而不回复实体

public static MovieDTO GetInstance(int dbId)
{
...
}

最有意义的是,您的 DTO 也在一个单独的项目中。所有这些抽象的原因是,当您必须更改数据上下文(例如,应用程序将开始使用不同的数据源)时,您只需要确保新数据项目也与相同的 DTO。它在内部如何工作,以及它使用哪些实体,只与项目内部相关。从外部(例如,从您的 MVC 应用程序),如何获取数据并不重要,重要的是您以您的 MVC 项目已经理解的形式(DTO 类)传递它。

您的所有 MVC Controller 逻辑都不必更改,因为 DTO 对象没有更改。这可以节省您的时间。如果您将实体链接到 Controller 和 View ,如果您突然决定更改实体,则必须重写两者。

如果您担心将实体转换为 DTO 以及将实体转换为 DTO 所必须编写的代码量,您可以查看像 Automapper 这样的工具。 .

主要问题:有必要吗?

这又是一个非常主观的问题。它与项目范围有关,也与应用程序的预期生命周期有关。如果它应该使用很长时间,那么让所有东西都可以互换可能是值得的。如果这是一个小规模、生命周期短的项目,那么为此增加的实现时间可能不值得。

我不能给你一个明确的答案。评估您希望应用程序适应变化的程度,以及应用程序将来发生变化的可能性。

免责声明:在我工作的公司,我们就是这样做的。这不是此类问题的唯一解决方案,但它是我熟悉的解决方案。就个人而言,我不喜欢进行抽象,除非有功能上的原因。

关于c# - EF 生成的类和模型之间的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24240521/

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