- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很困惑。
我有我的 linq-to-sql 模型,它是数据库表的镜像
(Id, CustomerId, RegionId,...N),
没什么有趣的,都是外键。现在我需要在我的 asp.net View 中查看这些数据。我创建了一个 ViewModel
(Id, CustomerId, Customer, RegionId, Region, CustomersSelectList, RegionsSelectList).
显然,viewmodel 是 linq-to-sql 模型的超集。
现在如何将一个转换为另一个?我正在使用 automapper,但对如何找到用于获取缺失数据的良好模式感到困惑。
我看到了可能的解决方案:
创建第 3 个类,它将是一个 l2s 模型 + 连接值,并通过连接和投影填充这个类。然后将此类自动映射到我的 View 模型。
通过投影返回匿名类并通过自动映射器将它们映射到 View 模型(不是很干净)。
创建用于查询的数据库 View ( View 是连接在一起的所有必需表)。
请帮助我,因为之前我一直在 View 中直接使用我的 L2S 类(在简单项目上),现在我有更复杂的 View ,需要做一些事情来解决复杂性。
此外,谁负责进行此转换?它应该在哪里发生?
谢谢。
更新:让我澄清一下。我需要能够获得我的业务实体的完整平面表示。在数据库中,它存储在多个表中,在 L2S 中,它是许多类(镜像数据库表),在我的 ViewModel 中,它应该从许多数据库表中“累积”。
我应该通过 linq 执行 sql 连接并直接填充 ViewModel 吗?
我是否应该创建一个包含所有字段的业务实体(不是 linq 实体),然后用 linq to sql 填充它,然后将其自动映射到 ViewModel?
我是否应该停止使用 L2S 类作为业务实体,从头开始创建一个新的业务实体类并将 L2S 视为哑 ORM?
最佳答案
我对 automapper 不够熟悉,不知道这是否真的有效,但我认为您可以分两步完成。首先,让 automapper 映射所有相互镜像的属性。接下来,要么在其他属性中包含可以获取正确值的逻辑,要么从启动映射的对象中设置它们。
关于c# - 如何克服 Model → ViewModel 阻抗失配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1763430/
我是一名优秀的程序员,十分优秀!