我已将所有代码从原始ADO.NET
SQLCommand
更改为Entity Framework
,以便日后更改代码的访问权限。但是,我已经意识到Entity Framework
有许多缺点,它并不像将原始SQL
命令注入数据库那么简单。此外,我使用Reverse Engineering
为Models & Mapping
生成MS Sql Server
。
目前,我正在尝试执行以下操作,但没有一列会更新。
string sql = @"UPDATE [ProductDB] SET CreatedProduct_Time=getdate(), CreatedProduct_Date=getdate()" + " WHERE [Material_No] = @Material_No";
db.Database.ExecuteSqlCommand(sql, new SqlParameter("@Material_No", materialnotxt));
列未更新。
我怀疑Entity Framework
是否会帮助我维护我的代码供将来使用,是否值得使用它而不是旧的raw SQL code
?到目前为止,存在许多限制因素,需要更高的学习曲线。
我在网上找到的一些令人困惑的部分context.Database.ExecuteSqlCommand
和MSDN
http://msdn.microsoft.com/en-us/library/bb738684.aspx之间的差异与我的方法完全不同。
修改
在插入Date
的所有信息时,我使用了不同的方法来插入Time
和textbox
。
using (var db = new ROGContext())
{
ProductDB product = new ProductDB
{
Material_No = long.Parse(MaterialNo_txtbox.Text),
Product_Line = ProductLineDropDownList1.SelectedItem.Text,
Product_Description = Description_txtbox.Text,
Size = Size_txtbox.Text,
UOM = UOM_txtbox.Text,
SupplierID = long.Parse(SupplierCountryListBox.SelectedItem.Value),
CreatedProduct_Date = DateTime.Parse(System.DateTime.Now.ToShortDateString()), //in the SQL database I have set the datatype as date to get yyyy/mm/dd
CreatedProduct_Time = DateTime.Now.TimeOfDay //in the SQL database I have set the datatype as time(0) to get hh:mm:ss
};
long queryselect = (from materialno in db.ProductDBs
where materialno.Material_No == product.Material_No
select materialno.Material_No).SingleOrDefault();
if (queryselect != long.Parse(materialnotxt))
{
Label1.Text = "Product successfully added in database";
Label1.Visible = true;
db.ProductDBs.Add(product);
db.SaveChanges();
}
答案 0 :(得分:0)
您可以使用Context.ExecuteStoreCommand
进行插入,更新和删除。
参见Entity Framework 4.0 Recipes: A Problem-Solution Approach
的第64页回答您编辑的部分:
ExecuteStoreQuery
选择ExecuteStoreCommand
用于插入,更新和删除