如何解决ASP.NET Core上具有身份的工作单元
我正在为移动应用程序创建Web api,我需要在用户注册时将数据添加到数据库中,我想将数据添加到多个表中
我的用户表设计:
注册时,用户选择他们是学生还是老师。 这里的问题是,注册时有两个表,我想针对这种情况使用工作单元,以防止数据保存失败。如果数据失败,则不要将数据添加到其他表中。
但是我该如何实现身份识别呢?
解决方法
您不需要考虑/过度使用Entity Framework Core的工作单元。
请参阅:
https://gunnarpeipman.com/ef-core-repository-unit-of-work/
因此,为了获得“交易”,您将致电
myInjectedContext.BeginTransaction().
/* alter any/all of the 3 DbSets */
myInjectedContext.Commit();
其中myInjectedContext是IDataContext。
public class MyTransactionallyFriendlyDbContext : DbContext /*(,IDataContext) */
{
public LasteDbContext(DbContextOptions<LasteDbContext> options)
: base(options)
{
}
public DbSet<AspnetUser> AspnetUsers { get; set; }
public DbSet<StudentUser> StudentUsers { get; set; }
public DbSet<TeacherUser> TeacherUsers { get; set; }
private IDbContextTransaction _transaction;
public void BeginTransaction()
{
_transaction = Database.BeginTransaction();
}
public void Commit()
{
try
{
SaveChanges();
_transaction.Commit();
}
finally
{
_transaction.Dispose();
}
}
public void Rollback()
{
_transaction.Rollback();
_transaction.Dispose();
}
}
这里是满足Ioc /单元测试需求的界面。
public interface IDataContext
{
DbSet<AspnetUser> AspnetUsers { get; set; }
DbSet<StudentUser> StudentUsers { get; set; }
DbSet<TeacherUser> TeacherUsers { get; set; }
void BeginTransaction();
void Commit();
void Rollback();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。