使用以下内容:
private BlogDataContext db = new BlogDataContext ();
article.Created = DateTime.UtcNow;
article.Modified = DateTime.UtcNow;
db.Articles.InsertOnSubmit(article);
db.SubmitChanges();
int id = article.Id;
我想知道这样安全吗?它会给我用户刚刚插入的文章的Id
,或者如果另一个用户在该用户之后的一小段时间内更新了文章,那么会出现并发的情况吗?
答案 0 :(得分:4)
您的dataContext实例(名为db)将捕获插入时数据库生成的标识值。如果另一个用户在该点之后修改了该值,您不仅不会看到它,而且当询问时,DataContext实例将为您提供现在过时的值!如果您考虑DataContext如何进行数据修改的对象跟踪,这是有道理的。
如果您尝试添加父记录,然后以“安全”(原子)方式添加子记录,请执行以下操作:
Order o1 = new Order() {Date = DateTime.Now, Quantity = 3};
Order o2 = new Order() {Date = DateTime.Now, Quantity = 4};
Customer c1 = new Customer() {Name = "Bob"};
c1.Orders.Add(o1);
c1.Orders.Add(o2);
db.InsertOnSubmit(c1);
db.SubmitChanges();
客户和两个订单都将被插入到数据库中 - 全部或全部(如果没有,您会得到一个例外,告诉您原因)。
请注意,我使用了relationship属性:Customer.Orders而不是使用ID。这是因为我不知道数据库将生成什么ID。 DataContext也不知道。但是,如果您检查Customer.Orders自动生成的代码 - 您将看到在那里管理id。