目前我正在学习ASP.NET,我坚持将数据存储到多个表.数据库模型如下所示:
我想要实现的是当我向Contact表添加新联系人以获取最后一个插入ID并自动插入表Phone / Tag / Email的数据时(如果该表有一些数据).是否有机会在单个查询中执行此操作,还是需要为每个表运行新查询?
这是Controller中使用的模型:
public partial class Contact
{
public Contact()
{
this.Emails1 = new HashSet<Email>();
this.Phones1 = new HashSet<Phone>();
this.Tags1 = new HashSet<Tag>();
}
public int id { get; set; }
public string firstname { get; set; }
public string lastname { get; set; }
public string address { get; set; }
public string city { get; set; }
public Nullable<byte> bookmarked { get; set; }
public string notes { get; set; }
public virtual ICollection<Email> Emails1 { get; set; }
public virtual ICollection<Phone> Phones1 { get; set; }
public virtual ICollection<Tag> Tags1 { get; set; }
}
}
这是电话/标签/电子邮件表格的模型(在一列中它的名称相同)
public partial class Email
{
public int id { get; set; }
public int id_contact { get; set; }
public string email1 { get; set; }
public virtual Contact Contact1 { get; set; }
}
以下是将新行广告到数据库的控制器类:
public string AddContact(Contact contact)
{
if (contact != null)
{
db.Contacts.Add(contact);
db.SaveChanges();
return "Contact Added";
}
else
{
return "Invalid Record";
}
}
最佳答案 您的Contact对象包含电子邮件,电话和标签的集合,因此在调用db.SaveChanges()之前,您可以将它们添加到Contact的集合中.
public string AddContact(Contact contact)
{
if (contact != null)
{
db.Contacts.Add(contact);
contact.Emails1.Add(new Email { Email1 = "email@email.com"})
contact.Emails1.Add(new Email { Email1 = "email2@email.com"})
contact.Phones1.Add(new Phone1 { PhoneNumber = "1234516123"})
db.SaveChanges();
return "Contact Added";
}
else
{
return "Invalid Record";
}
}
只需确保正确设置了外键引用,如果Contact对象是新联系人,则它具有标识列.