将实体框架与 Code-First 结合使用时,调用数据库数据时的最佳做法是什么?
这是我第一次将实体框架与 MVC 一起使用,并注意到它会自动在我的 DataLayer 中构建模型。我的 MVC UI 中也有基本模型,允许我在视图中操作和显示数据。我目前使用我的工作流层抓取数据,然后将数据库模型自动映射到我的 UI 模型以显示数据。
这是最佳做法吗?我应该使用实体框架模型而不是我的 UI 模型吗?或者这甚至可以干净地做?
任何有关此事的信息将不胜感激。
将实体框架与 Code-First 结合使用时,调用数据库数据时的最佳做法是什么?
这是我第一次将实体框架与 MVC 一起使用,并注意到它会自动在我的 DataLayer 中构建模型。我的 MVC UI 中也有基本模型,允许我在视图中操作和显示数据。我目前使用我的工作流层抓取数据,然后将数据库模型自动映射到我的 UI 模型以显示数据。
这是最佳做法吗?我应该使用实体框架模型而不是我的 UI 模型吗?或者这甚至可以干净地做?
任何有关此事的信息将不胜感激。
这真的取决于你。如果您也想为您的视图模型重用相同的 EF 实体;前进。就个人而言,我宁愿不这样做。这是因为您通常最终会向类中添加一堆与数据中存储的内容无关的属性,是的;我知道你可以使用这样的NotMapped
属性:
[NotMapped]
public string MyExtraProperty { get; set; }
但我不喜欢。此外,您最终会在属性中添加[Display]
和其他属性,并且在不知不觉中,您已经得到了一些装饰有数据特定和 UI 特定属性的东西,如果您不小心,它可能会变得混乱。
所以对我来说;我有以下内容:
控制器调用存储库来获取域实体并将其转换为视图模型以进行显示。
我发现这是一种更清洁的方法,但也许这只是我.. 最重要的是选择一种方法并坚持使用它以保持代码的一致性和清晰性,但任何一种方法都是可以接受的.. “无论浮动你的船”正如他们所说...
EF 创建的 POCO 应该用作您的模型。一般的想法是你有 EF 提供对你的数据库的访问。您使用 LINQ 和/或扩展方法查询 EF,并通过将它们绑定到 WPF 中来最终得到您在 UI 上显示的对象或对象集合。当然,如果您使用的是 WPF 而不是较旧的 WinForms。我可以从经验告诉你,一旦你熟悉了这些技术,这是一个非常简化的过程。这就是一个非常基本的设置的工作方式。
一种更高级的解决方法是将诸如模型-视图-视图模型 (MVVM) 之类的架构以及可能的存储库模式添加到混合中,此时您可以更好地分离代码和表示,但会增加复杂性。
我不知道您使用的是哪种风格的 MVC,以及如何将其与上述混合,但如果您想了解更多关于 EF 的设想如何工作,您应该研究我上面列出的技术.