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
}