C# 使用实体框架将数据从单个控件输入多个表的过程

C# 使用实体框架将数据从单个控件输入多个表的过程,c#,sql-server,asp.net-mvc,C#,Sql Server,Asp.net Mvc,我有两张桌子 RegisterTable : FirstName LastName UserName Password UserLoginTable : UserName Password 我想将数据插入同一控件的多个表中。我正在将数据插入注册表表,同时我希望将数据插入UserLogin表,但只有用户名和密码插入UserLogin表,因为我的UserLogin表包

我有两张桌子

RegisterTable : FirstName
                LastName
                UserName
                Password

UserLoginTable : UserName
                 Password
我想将数据插入同一控件的多个表中。我正在将数据插入注册表表,同时我希望将数据插入UserLogin表,但只有用户名和密码插入UserLogin表,因为我的UserLogin表包含ony UserName和Password列

My Conntroller
 public class RegisterController : Controller
{



        private IRegisterService registerService;


        public RegisterController(IRegisterService _registerService)
        {
        registerService = _registerService;

        }
        //GET: Register
      public ActionResult Index()
    {
        List<RegisterDTO> registers = registerService.GetAllRegisters();
        return View(registers.ToList());
    }

   [HttpGet]
   public ActionResult Create()
    {
        return View();
    }
    [HttpPost]
    public ActionResult Create(RegisterDTO registerDTO)
    {
        try
        {
            bool isSaved;
            if (registerDTO.Id == 0)
                isSaved = registerService.Create(registerDTO);

            else

                return View();

        }

如果我理解正确的话

在将数据插入RegisterTable的同一函数中,可以将数据插入UserLogintTable

一种方法是将匿名UserTableDTO对象从RegisterTo对象创建到对象,并使用Add函数添加它,类似这样

Context.UserLoginDTOs.Add(new UserLoginDTO()
                {
                    UserName = registerDTO.UserName,
                    Password = registerDTO.Password
                });

我假设您已经使用了
实体框架
,并且在某个地方有数据库上下文属性,因此您可以使用这种方式将数据插入多个表中。简化代码,使其看起来更可读

public class RegisterController : Controller
    {
        #region Properties
        private IRegisterService _registerService;
        private readonly RegisterDbContext _registerDbContext;   //Replace it with your custom <DbContext> class
        #endregion

        #region Constructor
        public RegisterController(IRegisterService registerService)
        {
            _registerService = registerService;
            _registerDbContext = new RegisterDbContext();
        }
        #endregion

        #region Actions
        [HttpPost]
        public ActionResult Create(RegisterDTO registerDTO)
        {
            //You can use Db Transactions to add data 
            using (var dbContextTransaction = _registerDbContext.Database.BeginTransaction())
            {
                try
                {
                    //Assuming this class as Database Entity refering to Register table in Database
                    Register register = new Register();
                    register.FirstName = registerDTO.FirstName;
                    register.LastName = registerDTO.LastName;
                    register.UserName = registerDTO.UserName;
                    register.Password = registerDTO.Password;
                    _registerDbContext.Register.Add(register);
                    _registerDbContext.SaveChanges();

                    //Assuming this class as Database Entity refering to UserLogin table in Database
                    UserLogin userLogin = new UserLogin();
                    userLogin.UserName = registerDTO.UserName;
                    userLogin.Password = registerDTO.Password;
                    _registerDbContext.UserLogin.Add(userLogin);
                    _registerDbContext.SaveChanges();


                    dbContextTransaction.Commit();
                    return View();
                }
                catch (Exception ex)
                {
                    dbContextTransaction.Rollback();
                }
            }
        }
        #endregion
    }
公共类注册表控制器:控制器
{
#区域属性
专用IRegisterService(注册服务);
private readonly RegisterDbContext _RegisterDbContext;//用自定义类替换它
#端区
#区域构造函数
公共注册表控制器(IRegisterService registerService)
{
_registerService=registerService;
_registerDbContext=新的registerDbContext();
}
#端区
#区域行动
[HttpPost]
公共操作结果创建(RegisterTo RegisterTo)
{
//您可以使用Db事务添加数据
使用(var dbContextTransaction=_registerDbContext.Database.BeginTransaction())
{
尝试
{
//假设该类是引用数据库中的注册表的数据库实体
寄存器=新寄存器();
register.FirstName=registerDTO.FirstName;
register.LastName=registerDTO.LastName;
register.UserName=registerDTO.UserName;
register.Password=registerDTO.Password;
_registerDbContext.Register.Add(Register);
_registerDbContext.SaveChanges();
//假设该类是引用数据库中UserLogin表的数据库实体
UserLogin UserLogin=new UserLogin();
userLogin.UserName=registerDTO.UserName;
userLogin.Password=registerDTO.Password;
_registerDbContext.UserLogin.Add(UserLogin);
_registerDbContext.SaveChanges();
dbContextTransaction.Commit();
返回视图();
}
捕获(例外情况除外)
{
dbContextTransaction.Rollback();
}
}
}
#端区
}

您使用的是什么数据库?MSSQL?@AshleyMedway是的MSSQL.Hi@AshleyMedway非常感谢,但我希望此函数在asp.net mvc(C#)中运行,而不使用sql查询。Sam,你是说使用实体框架吗?如果你能举例说明你现在是如何插入数据的,那会很有帮助。@AshleyMedway实际上我在用实体框架来做这件事。所以,是的。
public class RegisterController : Controller
    {
        #region Properties
        private IRegisterService _registerService;
        private readonly RegisterDbContext _registerDbContext;   //Replace it with your custom <DbContext> class
        #endregion

        #region Constructor
        public RegisterController(IRegisterService registerService)
        {
            _registerService = registerService;
            _registerDbContext = new RegisterDbContext();
        }
        #endregion

        #region Actions
        [HttpPost]
        public ActionResult Create(RegisterDTO registerDTO)
        {
            //You can use Db Transactions to add data 
            using (var dbContextTransaction = _registerDbContext.Database.BeginTransaction())
            {
                try
                {
                    //Assuming this class as Database Entity refering to Register table in Database
                    Register register = new Register();
                    register.FirstName = registerDTO.FirstName;
                    register.LastName = registerDTO.LastName;
                    register.UserName = registerDTO.UserName;
                    register.Password = registerDTO.Password;
                    _registerDbContext.Register.Add(register);
                    _registerDbContext.SaveChanges();

                    //Assuming this class as Database Entity refering to UserLogin table in Database
                    UserLogin userLogin = new UserLogin();
                    userLogin.UserName = registerDTO.UserName;
                    userLogin.Password = registerDTO.Password;
                    _registerDbContext.UserLogin.Add(userLogin);
                    _registerDbContext.SaveChanges();


                    dbContextTransaction.Commit();
                    return View();
                }
                catch (Exception ex)
                {
                    dbContextTransaction.Rollback();
                }
            }
        }
        #endregion
    }