从来宾创建客户 - 使用 MVC3、C#、实体框架、Razor 视图、SQL Server
本文关键字:实体 框架 视图 Server SQL Razor MVC3 创建 客户 使用 | 更新日期: 2023-09-27 17:58:59
我正在我的程序中添加一个函数,允许员工将活动客人转换为客户,这样他们就不必重新键入所有内容。
我遇到的一个问题是...访客在与其其余信息相同的表中有一个电话 # 和 rmail。客户的电话 # 和电子邮件存储在单独的一对多表中。
因此,在转换过程中,我需要为电子邮件和电话号码分配一个CustomerID
,以将其存储到表中。
如何创建客户并保留CustomerID
以便用于分配给CustomerEmail
表和CustomerPhone
表?
我有一个视图模型来处理所有变量。
我必须对下面的代码执行哪些操作才能让它分配一个CustomerID
,以便成功调用SaveChanges()
以进行CustomerPhones
&&CustomerEmails
?
var customerNew = new Customer
{
CustomerTypeId = customer.CustomerTypeId,
FirstName = customer.FirstName,
LastName = customer.LastName,
FullName = customer.FirstName + " " + customer.LastName,
Birthday = customer.Birthday,
GenderId = customer.GenderId,
CompanyName = customer.CompanyName,
UserName = customer.UserName,
FavMusicId = customer.FavMusicId,
OwnerId = customer.OwnerId
};
var phoneNew = new CustomerPhone
{
CustomerId = customer.CustomerId,
Number = customer.Number,
PhoneTypeId = 5
};
var emailNew = new CustomerEmail
{
CustomerId = customer.CustomerId,
Email = customer.Email
};
db.Customers.AddObject(customerNew);
db.CustomerPhones.AddObject(phoneNew);
db.CustomerEmails.AddObject(emailNew);
db.SaveChanges();
return RedirectToAction("Details", new { id = customer.CustomerId });
谢谢
提姆
额外奖励积分: 如果您能告诉我如何在创建客户后自动从数据库中删除客人,而无需单击其他任何内容。 :)
如果在数据库级别设置了正确的外键关系,并且 EF 模型已选取它们,则应该能够编写:
var customerNew = new Customer
{
// ... set all the properties here
}
var phoneNew = new CustomerPhone
{
Number = customer.Number,
PhoneTypeId = 5
};
customerNew.CustomerPhones.Add(phoneNew); // add new phone to the association
var emailNew = new CustomerEmail
{
Email = customer.Email
};
customerNew.CustomerEMails.Add(phoneNew); // add new e-mail to the association
db.Customers.AddObject(customerNew);
db.SaveChanges();
并让 EF 处理所有其他事情,例如找出 ID 和所有内容。
将客人信息(完整(放入创建新记录(客户、电话和电子邮件(的存储过程中。
额外奖励积分选项
- 向存储过程添加删除 - 这里的好处是您可以将其放在事务中
- 添加一个触发器,根据插入到客户端表中的内容删除来宾 - 如果每个人都在成为客户之前都是来宾,则非常有效
这里的重点是你不必单独在MVC中解决这个问题,因为持久性是真正的问题,而不是用户体验。