gpt4 book ai didi

c# - 在单个查询中将数据插入多个表

转载 作者:行者123 更新时间:2023-11-30 12:26:42 27 4
gpt4 key购买 nike

目前我正在学习 ASP.NET,并且坚持将数据存储到多个表中。数据库模型如下图所示:

Database model

我想要实现的是,当我将新联系人添加到 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; }
}
}

这是 Phone/Tags/Email tabels 的模型(它与一列中的不同名称相同)

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; }
}

这是将新行添加到数据库的 Controller 类:

 public string AddContact(Contact contact)
{
if (contact != null)
{

db.Contacts.Add(contact);
db.SaveChanges();
return "Contact Added";
}
else
{
return "Invalid Record";
}
}

最佳答案

您的联系人对象包含电子邮件、电话和标签的集合,因此在您调用 db.SaveChanges() 之前,您可以将它们添加到您的联系人集合中。

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";
}
}

只需确保您的外键引用设置正确,并且如果联系人对象是新联系人,则该对象具有标识列。

关于c# - 在单个查询中将数据插入多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27671189/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com