【发布时间】:2011-03-12 18:05:45
【问题描述】:
在使用不同的数据上下文时,我在使用 Linq to SQL 在数据库中插入和删除对象时遇到问题。只要我使用相同的上下文插入和删除,代码就可以正常工作。但是,不能为每个函数使用相同的上下文,因为这会引入并发问题,因为代码用于 Web 服务。
代码是用 F# 编写的,但应该没有任何区别。
let CreateUser user =
use context = new Rsvp(connectionString)
context.Users.InsertOnSubmit(user)
context.SubmitChanges()
let RemoveUserById user_id =
use context = new Rsvp(connectionString)
let user = GetUser user_id
context.Users.DeleteOnSubmit(user)
context.SubmitChanges()
DeleteOnSubmit 抛出异常如下:
System.InvalidOperationException:无法删除尚未附加的实体。
现在您会认为您可以将对象附加到新的数据上下文中。但是这样做会导致另一个异常:
System.NotSupportedException:尝试附加或添加一个不是新的实体,可能是从另一个 DataContext 加载的。这不受支持。
我正在使用以下方法从 C# 测试项目中对此进行测试
[TestMethod]
public void Can_create_and_remove_a_new_user()
{
User user = new User();
user.Name = "Test User";
user.Email = "test@mail.com";
user.Role_id = 1;
UserModule.CreateUser(user);
User inserted_user = UserModule.GetUserByEmail("test@mail.com");
Assert.IsNotNull(inserted_user);
UserModule.RemoveUserById(inserted_user.Id);
}
难道不能从不同的上下文中删除/插入同一个对象吗?
编辑: 有朋友发给我this article,这可能有助于解决问题,但似乎不是问题的最终解决方案。
【问题讨论】:
标签: linq-to-sql exception f# datacontext