我只是想确保我正确理解使用LINQ-TO-SQL的ASP.NET MVC2的最佳实践。
如果我在以下任何一点出错,请纠正我:
一般来说,我的问题是关于数据验证。我习惯做的是为我的每个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);
右?
答案 0 :(得分:2)
我认为最佳做法是使用 ViewModel (您称之为“阴影”模型),该模型仅用于将相关数据模型信息传递给视图并合并UI验证元数据。您还可以使用AutoMapper等库来复制值,而不是手动编码每个值。
表=模型方法可以在非常简单的场景中工作(少数表+简单的UI与数据库模式完全匹配)。为了以后节省很多痛苦,建议使用ViewModels。