【发布时间】:2010-04-13 16:36:21
【问题描述】:
我已经使用 ADO.NET Strogly-Typed DataSet 模型大约 2 年了,用于处理 CRUD 和存储过程执行。去年我构建了我的第一个 MVC 应用程序,我真的很喜欢 LINQ 的易用性和灵活性。也许对我来说最大的卖点是使用 LINQ,我不必再创建将返回 SCOPE_IDENTITY 的“插入”存储过程(DataSet 模型中自动生成的插入语句在不修改的情况下无法做到这一点)。
目前,我将 LINQ 与 ASP.NET 3.5 WebForms 一起使用。我的插入看起来像这样:
ProductsDataContext dc = new ProductsDataContext();
product p = new product
{
Title = "New Product",
Price = 59.99,
Archived = false
};
dc.products.InsertOnSubmit(p);
dc.SubmitChanges();
int productId = p.Id;
所以,这个产品示例非常基础,对,在未来,我可能会在数据库中添加更多字段,例如“InStock”、“Quantity”等......按照我的理解,我需要将这些字段添加到数据库表中,然后删除这些表并将其重新添加到 LINQ to SQL 类设计视图以刷新 DataContext。听起来对吗?
问题是任何非空的新字段都不会被 ASP.NET 构建过程捕获。例如,如果我在数据库中添加了一个“数量”的非空字段,上面的代码仍然会构建。在 DataSet 模型中,存储过程方法将接受一定数量的参数,并警告我如果不包含数量值,我的 Insert 将失败。 LINQ 存储过程方法也是如此,但是,据我所知,LINQ 不提供自动生成插入语句的方法,这意味着我又回到了开始的地方。
最重要的是,如果我使用上述插入语句并向我的数据库添加一个非空字段,它会在大约 10-20 处破坏我的应用程序,并且我无法检测到它.我唯一的选择是对关键字“products.InsertOnSubmit”进行解决方案端搜索并确保分配了新字段吗?
有没有更好的办法?
谢谢!
【问题讨论】:
标签: linq-to-sql stored-procedures strongly-typed-dataset