先说说 insert 吧.
当EF执行insert时,如果我们传入的对象是有关联(1对多等)的话,它会执行多个语句 insert到多个表,
并且再select出来填充我们的属性(因为有些column默认值是sql设定的,比如id等,我们insert后要有最新的数据丫).
using (EFDB db = new EFDB()) { db.prods.Add(new Prod { code = "mk100", name = "name", detail = new ProdDetail //1对1关系当 prod_detail table { fullDescription = "des" } }); db.SaveChanges(); }
Opened connection at 2014/9/28 15:33:53 +08:00 Started transaction at 2014/9/28 15:33:53 +08:00 SET SESSION sql_mode='ANSI';INSERT INTO `prod`( `code`, `name`) VALUES ( @gp1, @gp2); SELECT `id` FROM `prod` WHERE row_count() > 0 AND `id`=last_insert_id() -- @gp1: 'mk100' (Type = String, IsNullable = false, Size = 5) -- @gp2: 'name' (Type = String, IsNullable = false, Size = 4) -- Executing at 2014/9/28 15:33:53 +08:00 -- Completed in 13 ms with result: EFMySqlDataReader INSERT INTO `prod_detail`( `prod_id`, `id`, `fullDescription`) VALUES ( 7, 0, @gp1) -- @gp1: 'des' (Type = String, IsNullable = false, Size = 3) -- Executing at 2014/9/28 15:33:53 +08:00 -- Completed in 15 ms with result: 1 Committed transaction at 2014/9/28 15:33:53 +08:00 Closed connection at 2014/9/28 15:33:53 +08:00 Disposed transaction at 2014/9/28 15:33:53 +08:00