Создать клиента из гостя - используя MVC3, C #, Entity Framework, Razor Views, SQL Server - PullRequest
1 голос
/ 14 июня 2011

Я добавляю в свою программу функцию, которая позволяет Сотрудникам преобразовывать гостя мероприятия в клиентов, чтобы им не приходилось все перепечатывать.

Одна проблема, с которой я сталкиваюсь, состоит в том, что ... Гость имеет номер телефона и rmail в той же таблице, что и остальная информация. Клиенты хранят свои номера телефонов и электронные письма в отдельной таблице «один ко многим».

Так что во время преобразования мне нужно CustomerID, чтобы присвоить адрес электронной почты и номер телефона, чтобы сохранить его в таблицах.

Как создать клиента и сохранить CustomerID, чтобы использовать его для присвоения таблицам CustomerEmail и CustomerPhone?

У меня есть ViewModel для обработки всех переменных.

Что я должен сделать с кодом ниже, чтобы он назначил 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 });

Спасибо,

Тим

ДОПОЛНИТЕЛЬНЫЕ бонусные баллы: Если вы можете сказать мне, как автоматически удалять гостя из базы данных после создания клиента, не нажимая ничего другого. :)

Ответы [ 2 ]

1 голос
/ 14 июня 2011

Если вы установили правильные отношения внешнего ключа на уровне базы данных, и ваша модель 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 обрабатывать все остальные, каквыяснить идентификаторы и все.

0 голосов
/ 14 июня 2011

Информация о госте (завершено) в хранимую процедуру, которая создает новые записи (клиент, телефон и электронная почта).

ДОПОЛНИТЕЛЬНЫЕ Бонусные очки

  1. Добавьте удаление к хранимой процедуре - вы можете добавить это в транзакцию
  2. Добавить триггер, который удаляет гостя на основе вставки в клиентскую таблицу - очень эффективно, если все являются гостями, прежде чем они станут клиентами

Суть в том, что вам не нужно решать эту проблему только в MVC, поскольку постоянство - это реальная проблема, а не пользовательский опыт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...