如何在应用程序层之间最佳地映射数据库感知实体类型

时间:2009-12-16 17:25:52

标签: asp.net-mvc linq-to-sql mapping repository-pattern

我有一个带有原始存储库层的ASP.NET MVC应用程序,它当前将LINQ to SQL实体提供给控制器,然后控制器将它们发送到视图。我现在想开始使用一些以域为中心的对象来代替我的LINQ to SQL实体,并且我一直在使用AutoMapper来帮助完成其中的一些。对于简单的属性到属性映射,它很好并且简单易用,但现在我面临映射实体的问题,这些实体本身仅包含模板文本和数据库连接以及查询信息。我想将这些模板化的源类型映射到完全令牌替换的目标类型。

例如,我有源和目标类型......

public class Source
{
    public int Id { get; set; }
    public string MarkupTemplate { get; set; }
    public string DatabaseConnectionString { get; set; }
    public string DatabaseQuery { get; set; }
}

public class Destination
{
    public int Id { get; set; }
    public string Value { get; set; }
}

源对象可能如下所示:

var source = new Source() {
    Id = 123,
    MarkupTemplate = "The %noun% is %adjective%.",
    DatabaseConnectionString = "Some SQL Server conn string",
    DatabaseQuery = "SELECT noun, adjective FROM things WHERE id=@id"
}

在绘图过程中(或其他地方,如果这样做有意义......我愿意接受建议!)我需要:

  1. 连接到源DatabaseConnectionString属性中描述的数据库。
  2. 执行源DatabaseQuery属性中的选择查询以获取单个记录。
  3. 使用从数据库返回的记录中找到的值替换源MarkupTemplate值中的标记。
  4. 将已替换令牌的内容放入目标的Value属性中。使用上面的示例source对象,目标的Value属性应包含“汽车为红色”。如果数据库查询返回名词和形容词的“car”和“red”。
  5. 在我的黑客攻击原型中,我在存储库中创建了快速而脏的方法来处理令牌替换步骤并返回令牌替换值字符串,但我想尝试将其清理成一个设计这更容易使用。最后,我希望有一个简单的映射机制,可以提供我可以发送到我的视图的目标对象,这些对象尽可能没有依赖关系。

0 个答案:

没有答案