使用以下内容:
private BlogDataContext db = new BlogDataContext ();
article.Created = DateTime.UtcNow;
article.Modified = DateTime.UtcNow;
db.Articles.InsertOnSubmit(article);
db.SubmitChanges();
int id = article.Id;
我想知道这样安全吗?它会给我用户刚刚插入的文章的 Id
吗,或者如果另一个用户在该用户之后几分之一秒更新文章,是否会出现并发情况?
最佳答案
您的 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();
客户和两个订单都将被插入数据库 - 全部或全部(如果没有,您会得到一个异常告诉您原因)。
请注意,我使用了关系属性:Customer.Orders 而不是使用 ID。这是因为我不知道数据库会生成什么Id。 DataContext 也不知道。但是,如果您检查 Customer.Orders 自动生成的代码 - 您会看到 ID 是在那里管理的。
关于c# - 使用 LINQ To SQL 检索新插入的记录 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2450363/