我已经使用ADO.NET Strogly-Typed DataSet模型大约2年了,用于处理CRUD和存储过程执行。在过去的一年里,我构建了我的第一个MVC应用程序,我非常喜欢LINQ的简易性和灵活性。也许对我来说最大的卖点是使用LINQ我不必创建“Insert”存储过程,它们将再次返回SCOPE_IDENTITY(DataSet模型中的自动生成的insert语句无法修改)。 / p>
目前,我正在使用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构建过程没有捕获任何非null的新字段。例如,如果我将“Quantity”的非空字段添加到数据库,则仍会构建上面的代码。在DataSet模型中,存储过程方法将接受一定数量的参数,并且如果我没有包含数量值,则会警告我Insert会失败。 LINQ存储过程方法也是如此,但据我所知,LINQ没有提供自动生成insert语句的方法,这意味着我回到了我开始的地方。
底线是如果我使用上面的插入语句,并且我在我的数据库中添加了一个非空字段,它会在大约10-20个地方破坏我的应用程序,我将无法检测到它。我唯一的选择是对关键字“products.InsertOnSubmit”进行解决方案搜索,并确保新字段已分配?
有更好的方法吗?
谢谢!
答案 0 :(得分:0)
创建一个NON-Null字段,默认值为whatever。这样,旧行将具有您知道的默认值,让您返回并向表中添加值。