2010-04-13 42 views
1

为了处理CRUD和存储过程执行,我已经使用ADO.NET Strogly-Typed DataSet模型大约2年了。在过去的一年中,我构建了我的第一个MVC应用程序,我非常喜欢LINQ的轻松和灵活性。也许对我来说最大的卖点是用LINQ时,我不必创建“插入”存储过程,以便返回SCOPE_IDENTITY(DataSet模型中的自动生成的插入语句无需修改就无法进行此操作)。LINQ InsertOnSubmit调试所需的字段

目前,我使用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”,“数量”等等......我的理解是,我需要将这些字段添加到数据库表中,然后删除并重新添加表到LINQ to SQL类设计视图以刷新DataContext。这听起来是对的吗?

问题是,任何非空的新字段都不会被ASP.NET构建过程捕获。例如,如果我向数据库添加了“数量”非空字段,上面的代码仍然会生成。在DataSet模型中,存储过程方法会接受一定数量的参数,并会警告我,如果我没有包含数量值,则Insert会失败。 LINQ存储过程方法也是如此,但是据我所知,LINQ没有提供自动生成插入语句的方法,这意味着我回到了我开始的地方。

底线是如果我使用上面的插入语句,并且向数据库添加非空字段,它会在大约10-20个位置中断我的应用程序,并且将无法检测到它。我唯一的选择是对关键字“products.InsertOnSubmit”进行解决方案端搜索,并确保新字段得到分配?

有没有更好的方法?

谢谢!

回答

0

创建一个NON-Null字段,默认值为any。这样老行就会有一个你知道的默认值,让你返回并向表中添加值。