使用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 });
谢谢,
提姆
额外奖励积分:如果您能告诉我如何在创建客户后自动从数据库中删除客户,而无需单击任何其他内容: 将客人信息(完整)导入存储过程,创建新记录(客户、电话和电子邮件) 额外积分选项
这里的要点是,您不必仅在MVC中解决这个问题,因为持久性才是真正的问题,而不是用户体验。将客户信息(完整)写入一个存储过程,以创建新记录(客户、电话和电子邮件) 额外积分选项
这里的要点是,您不必仅在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()上的关联-再次感谢您的帮助