ASP.NET MVC 2 LINQ-to-SQL生成的类和模型验证

时间:2010-01-12 19:38:08

标签: asp.net asp.net-mvc linq-to-sql model

我只是想确保我正确理解使用LINQ-TO-SQL的ASP.NET MVC2的最佳实践。

如果我在以下任何一点出错,请纠正我:

  • LINQ TO SQL为其生成类 你,根据你的表格
  • 生成的类是模型
  • 这些是我们应该在视图中使用的模型
  • 如果我们想要为模型添加验证,我们会扩展分部类并设置数据 注释。类似 this

一般来说,我的问题是关于数据验证。我习惯做的是为我的每个LINQ-to-SQL生成的类创建一个“shadow”模型,并将数据验证放在那里。然后,在控制器中,我创建了一个“阴影”模型的实例,并检索数据(使用存储库模式)。从实体映射到阴影模型并将其传递给视图。所以,类似的东西(在控制器中):

// Car is class generated by LINQ-to-SQL, based on the Car table
// Use repository class to retrieve the data (Car)
Car car = myDatabaseRepository.GetCar(1);

// CarModel is my 'shadow' model, which has all the data validation.
// For example, it makes sure Year is before 2010 (let's say).
CarModel carModel = new CarModel();
carModel.Year = car.Year;
carModel.Make = car.Make;
carModel.Model = car.Model;

return View(carModel);

这是错误的,正确的(没有双关语意)?它应该只是:

// Car should have been extended (as partial) and data annotation
// should have been in the extended class, rather than a whole separate
// model class.
Car car = myDatabaseRepository.GetCar(1);
return View(car);

右?

1 个答案:

答案 0 :(得分:2)

我认为最佳做法是使用 ViewModel (您称之为“阴影”模型),该模型仅用于将相关数据模型信息传递给视图并合并UI验证元数据。您还可以使用AutoMapper等库来复制值,而不是手动编码每个值。

表=模型方法可以在非常简单的场景中工作(少数表+简单的UI与数据库模式完全匹配)。为了以后节省很多痛苦,建议使用ViewModels。