从来宾创建客户 - 使用 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 });

谢谢

提姆

额外奖励积分: 如果您能告诉我如何在创建客户后自动从数据库中删除客人,而无需单击其他任何内容。 :)

从来宾创建客户 - 使用 MVC3、C#、实体框架、Razor 视图、SQL Server

如果在数据库级别设置了正确的外键关系,并且 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 和所有内容。

将客人信息(完整(放入创建新记录(客户、电话和电子邮件(的存储过程中。

额外奖励积分选项

  1. 向存储过程添加删除 - 这里的好处是您可以将其放在事务中
  2. 添加一个触发器,根据插入到客户端表中的内容删除来宾 - 如果每个人都在成为客户之前都是来宾,则非常有效

这里的重点是你不必单独在MVC中解决这个问题,因为持久性是真正的问题,而不是用户体验。