C# 多对多CRUD操作ASP.Net内核

C# 多对多CRUD操作ASP.Net内核,c#,linq,asp.net-core,asp.net-core-webapi,ef-core-3.0,C#,Linq,Asp.net Core,Asp.net Core Webapi,Ef Core 3.0,我有三个表-Contact、Address和ContactAddress(联接表)。以下是表格: using System; using System.Collections.Generic; namespace ProjectWayneAPI.Models { public partial class Contact { public Guid Id { get; set; } public DateTime? DateEntered { get; set; } p

我有三个表-Contact、Address和ContactAddress(联接表)。以下是表格:

using System;
using System.Collections.Generic;

namespace ProjectWayneAPI.Models
{
public partial class Contact
{

    public Guid Id { get; set; }
    public DateTime? DateEntered { get; set; }
    public bool? Deleted { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; } 
    public string PhoneHome { get; set; }
    public string Email { get; set; }

    public virtual ICollection<ContactAddress> ContactAddress { get; set; }

}
}

using System;
using System.Collections.Generic;

namespace ProjectWayneAPI.Models
{
public partial class Address
{
    public Guid Id { get; set; }
    public DateTime? DateCreated { get; set; }
    public DateTime? DateModified { get; set; }
    public string Lot { get; set; }
    public string Road { get; set; }
    public string Street { get; set; }
    public string Suburb { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Postcode { get; set; }
    public string Country { get; set; }
    public string Latitude { get; set; }
    public string Longitude { get; set; }
    public bool? Deleted { get; set; }

    public virtual ICollection<ContactAddress> ContactAddress { get; set; }
}
}

using System;
using System.Collections.Generic;

namespace ProjectWayneAPI.Models
{
public partial class ContactAddress
{
    public Guid Id { get; set; }
    public DateTime? Created { get; set; }
    public bool? Deleted { get; set; }
    public Guid? ContactId { get; set; }
    public Guid? AddressId { get; set; }

    public virtual Address Address { get; set; }
    public virtual Contact Contact { get; set; }
}
}
使用系统;
使用System.Collections.Generic;
名称空间ProjectWayneAPI.Models
{
公共部分类接触
{
公共Guid Id{get;set;}
公共日期时间?日期输入{get;set;}
公共bool?已删除{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共字符串PhoneHome{get;set;}
公共字符串电子邮件{get;set;}
公共虚拟ICollection联系人地址{get;set;}
}
}
使用制度;
使用System.Collections.Generic;
名称空间ProjectWayneAPI.Models
{
公共部分类地址
{
公共Guid Id{get;set;}
公共日期时间?DateCreated{get;set;}
公共日期时间?日期修改{get;set;}
公共字符串Lot{get;set;}
公共字符串道路{get;set;}
公共字符串Street{get;set;}
公共字符串{get;set;}
公共字符串City{get;set;}
公共字符串状态{get;set;}
公共字符串邮政编码{get;set;}
公共字符串国家{get;set;}
公共字符串纬度{get;set;}
公共字符串经度{get;set;}
公共bool?已删除{get;set;}
公共虚拟ICollection联系人地址{get;set;}
}
}
使用制度;
使用System.Collections.Generic;
名称空间ProjectWayneAPI.Models
{
公共部分类联系人地址
{
公共Guid Id{get;set;}
公共日期时间?已创建{get;set;}
公共bool?已删除{get;set;}
公共Guid?联系人ID{get;set;}
公共Guid?地址ID{get;set;}
公共虚拟地址{get;set;}
公共虚拟联系人联系人{get;set;}
}
}
为简单起见,我不使用存储库模式

对于创建操作,有两种情况:

  • 在创建联系人和地址表时填充ContactAddress表
  • 创建联系人和地址表后填充联接表
对于我们的业务需求,我正在尝试适应,第一个是因为用户将在点击“保存”按钮的同时填充联系人和地址表


我该如何做(在创建两个实体时填充链接实体),以及在更新实体时如何更新多对多关系?以及删除操作。

如果您的
Guid Id
是在数据库级别生成的(它是在插入之后分配的)。对于您的情况:插入
联系人
地址
,并将它们链接起来,您必须首先像这样插入
联系人
地址

var contact = new Contact(); 
var address = new Address();  

dbContext.Add(contact);
dbContext.Add(address);

dbContext.SaveChanges();

var contactAddress = new ContactAddress() 
{
   AddressId = address.Id,
   ContactId = contact.Id 
}
dbContext.Add(contactAddress);
dbContext.SaveChanges();