LINQ InsertOnSubmit调试所需的必填字段

时间:2010-04-13 16:36:22

标签: linq-to-sql stored-procedures strongly-typed-dataset

我已经使用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”进行解决方案搜索,并确保新字段已分配?

有更好的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

创建一个NON-Null字段,默认值为whatever。这样,旧行将具有您知道的默认值,让您返回并向表中添加值。