Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MVC3、C#、实体框架、Razor视图、SQL Server从来宾创建客户_C#_Entity Framework_Asp.net Mvc 3_Razor - Fatal编程技术网

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

使用MVC3、C#、实体框架、Razor视图、SQL Server从来宾创建客户,c#,entity-framework,asp.net-mvc-3,razor,C#,Entity Framework,Asp.net Mvc 3,Razor,我在我的程序中添加了一个功能,允许员工将事件来宾转换为客户,这样他们就不必重新键入所有内容 我遇到的一个问题是。。。客人的电话和电子邮件与其他信息放在同一张桌子上。客户的手机和电子邮件存储在单独的一对多表中 因此,在转换过程中,我需要一个CustomerID来分配电子邮件和电话号码,以便将其存储到表中 如何创建客户并保留CustomerID,以便用于分配CustomerEmail和CustomerPhone表 我有一个ViewModel来处理所有变量 要让下面的代码分配一个CustomerID,

我在我的程序中添加了一个功能,允许员工将事件来宾转换为客户,这样他们就不必重新键入所有内容

我遇到的一个问题是。。。客人的电话和电子邮件与其他信息放在同一张桌子上。客户的手机和电子邮件存储在单独的一对多表中

因此,在转换过程中,我需要一个
CustomerID
来分配电子邮件和电话号码,以便将其存储到表中

如何创建客户并保留
CustomerID
,以便用于分配
CustomerEmail
CustomerPhone

我有一个ViewModel来处理所有变量

要让下面的代码分配一个
CustomerID
,以成功调用
CustomerPhones
SaveChanges()
,&
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 });
谢谢,

提姆


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

将客人信息(完整)导入存储过程,创建新记录(客户、电话和电子邮件)

额外积分选项

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

  • 这里的要点是,您不必仅在MVC中解决这个问题,因为持久性才是真正的问题,而不是用户体验。

    将客户信息(完整)写入一个存储过程,以创建新记录(客户、电话和电子邮件)

    额外积分选项

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

  • 这里的要点是,您不必仅在MVC中解决这个问题,因为持久性是真正的问题,而不是用户体验。

    如果您已经在数据库级别设置了适当的外键关系,并且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和所有的事情。

    如果您在数据库级别设置了适当的外键关系,并且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和所有事情。

    我知道你没有要求这样做,但一旦你找到了解决方案,我强烈建议使用automapper(或其他类似工具)为你处理映射。它将按照惯例完成很多这方面的工作,并使代码看起来更干净……我希望您在
    CustomerPhone
    Customer
    表之间有外键关系-对吗??(同样在
    客户电子邮件
    客户
    之间)在这种情况下,您可以(1)创建您的客户,(2)添加他的客户电话,并通过EF关联将两者连接起来,以及(3)创建一封客户电子邮件,并再次将其与主
    客户
    对象关联,然后让EF为您完成所有工作。@marc_s是的,我已经设置了所有外键,并且我正在为EFI使用POCOs。我知道您没有要求这样做,但一旦找到解决方案,我强烈建议使用automapper(或其他类似工具)为您处理映射。它将按照惯例完成很多这方面的工作,并使代码看起来更干净……我希望您在
    CustomerPhone
    Customer
    表之间有外键关系-对吗??(同样在
    客户电子邮件
    客户
    之间)在这种情况下,您可以(1)创建您的客户,(2)添加他的客户电话,并通过EF关联将两者连接起来,以及(3)创建一封客户电子邮件,并再次将其与主
    客户
    对象关联,然后让EF为您完成所有工作…@marc_s是的,我已设置了所有外键,我正在使用POCOs for EF,这如何让我为CustomerMail和CustomerPhone表插入CustomerID?假设整数具有自动递增集@id=SCOPE\u IDENTITY()。如果不是自动创建,还有其他方法。这如何让我为CustomerMail和CustomerPhone表插入CustomerID?假设整数具有自动增量集@id=SCOPE\u IDENTITY()。如果不是自动创建,还有其他方法。谢谢!!!我整天都在做这个。我不知道你能不能加入这样的联想。非常感谢。我是否能够在db.Guests.DeleteObject(guest)中通过;在savechanges()之前,在那里???要让它将客人从他们当前的客人列表中删除。@Timothy Green:是的,当然-你应该能够(1)用他的电话和电子邮件添加新客户,(2)同时删除旧的“客人”条目,只需一次调用
    .SaveChanges
    我想我应该可以做一些类似的事情来删除DeleteObject()上的关联-再次感谢您的帮助。谢谢!!!我整天都在做这个。我不知道你能不能加入这样的联想。非常感谢。我是否能够在db.Guests.DeleteObject(guest)中通过;在savechanges()之前,在那里???要让它将客人从他们当前的客人列表中删除。@Timothy Green:是的,当然-你应该能够(1)用他的电话和电子邮件添加新客户,(2)同时删除旧的“客人”条目,只需调用
    .SaveChanges
    我想我应该可以做一些类似的事情来删除DeleteObject()上的关联-再次感谢您的帮助