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

问题描述

| 我在程序中添加一个函数,该函数允许员工将事件来宾转换为客户,因此他们不必重新输入所有内容。 我遇到的一个问题是...访客在其余表的同一表中有一个电话#和rmail。客户将其电话号码和电子邮件存储在单独的一对多表中。 因此,在转换期间,我需要一个“ 0”来分配给电子邮件和电话号码以将其存储到表中。 我如何创建客户并保留“ 0”以用于分配给“ 2”和“ 3”表? 我有一个viewmodel来处理所有变量。 为了对
CustomerPhones
&&
CustomerEmails
成功调用
SaveChanges()
,我必须对下面的代码执行什么操作才能使其分配
CustomerID
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中解决此问题,因为持久性是真正的问题,而不是用户体验。