我很困惑。
我有我的linq-to-sql模型,它是数据库表的镜像
(Id, CustomerId, RegionId,...N),
没有什么有趣的,所有的外键。现在我需要在我的asp.net视图中查看这些数据。我创建了一个ViewModel
(Id, CustomerId, Customer, RegionId, Region, CustomersSelectList, RegionsSelectList).
显然,viewmodel是linq-to-sql模型的超集。
现在我如何将一个变换为另一个?我正在使用自动播放器,但对于如何找到获取缺失数据的良好模式感到困惑。
我看到了可能的解决方案:
创建第3类,它将是l2s模型+连接值,并通过连接和投影填充此类。然后将此类自动化为我的viewmodel。
通过投影返回匿名类,并通过automapper将它们映射到viewmodels(不是很干净)。
创建用于查询的数据库视图(视图是连接在一起的所有必需表)。
请帮助我,因为早些时候我一直在视图中使用我的L2S类(在简单的项目中),现在我有更复杂的视图,需要做一些事情来解决复杂性。
另外,谁的责任是进行这种转变?应该在哪里发生?
谢谢。
更新: 让我澄清一下。我需要能够完全展示我的业务实体。 在db中它存储在多个表中,在L2S中它是许多类(镜像db表),在我的ViewModel中它应该从许多db表中“累积”。
我应该通过linq执行sql连接并直接填充ViewModel吗?
我应该创建一个包含所有字段的业务实体(不是linq),并用linq填充到sql,然后将其自动化到ViewModel?
我是否应该停止使用L2S类作为业务实体,从头开始创建一个新的业务实体类,并将L2S视为一个愚蠢的ORM?
答案 0 :(得分:1)
我对automapper不太熟悉,知道这实际上是否有用,但我认为你可以分两步完成。首先,让automapper映射彼此镜像的所有属性。接下来,要么在其他属性中包含可以获取正确值的逻辑,要么从启动映射的对象中设置逻辑。