C# 实体框架如何在其他查询失败时恢复已执行的查询
在我的web应用程序中,当用户注册时,我必须将他的凭据存储在一个表中,将他的个人资料存储在另一个表中C# 实体框架如何在其他查询失败时恢复已执行的查询,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,在我的web应用程序中,当用户注册时,我必须将他的凭据存储在一个表中,将他的个人资料存储在另一个表中 public long CreateUser(User user) { using(EF db = new EF()) { db.AddToUsers(user); db.SaveChanges(); return user.UserId; } } public void CreateUserAuth(UserAuth userAuth) { using(E
public long CreateUser(User user) {
using(EF db = new EF()) {
db.AddToUsers(user);
db.SaveChanges();
return user.UserId;
}
}
public void CreateUserAuth(UserAuth userAuth) {
using(EF db = new EF()) {
db.AddToUserAuths(userAuth);
db.SaveChanges();
}
}
例如:当User1注册时,我将User1、city、country保存在Users表中。并将user1、password、CreatedOn保存在UserAuths表中。
在本例中,我的代码是
CreateUser(user);
CreateUserAuth(userAuth);
...
如果CreateUserAuth因某种原因失败,如何在CreateUser中恢复查询?有没有一种方法可以在不进行大量结构性改革的情况下实现这一目标 我使用类似的功能创建了一个完整的网站。现在我意识到,如果一个函数失败,就无法恢复已经执行的语句
提前感谢。您可以通过使用事务来完成这一点。本文可能有助于您理解事务
这与经典ASP无关。@Westie,谢谢你的建议。我更改了标题。如果我使用下面的代码,db将被销毁并重新创建,对吗?因此,如果CreateUserAuth失败,事务是否可以回滚CreateUser<代码>使用(TransactionScope scope=new TransactionScope()){CreateUser(user);CreateUserAuth(userAuth);scope.Complete();}代码>SQL Server不允许您在事务中创建数据库。EF可能会在数据库创建期间创建一个事务范围。如果
scope.Complete()代码>未被调用,则更改未提交。要说数据库已销毁并在中重新创建,此处不适用。。。。实际上,数据库中事务的目的是在scope.complete()之后执行完成代码或恢复提交之前所做的任何更改;您必须设置一些bool指示符并根据该指示符向数据库提交更改。通过销毁和重新创建,我的意思是说我的ef.SaveChanges
将处理ef,对吗?在这种情况下,范围是否有效?或者我应该更改代码以对CreateUser和CreateAuthUser函数使用相同的ef吗?(仍处于学习模式。请原谅我的非技术性解释)