Как сделать авто заполнение Foreign Key в Entity Framework?

public class MSDBcontext : DbContext
{
    public MSDBcontext(DbContextOptions<MSDBcontext> options) 
        : base(options)
    {

    }
    public DbSet<Mails> Mails { get; set; }
    public DbSet<MailsResult> MailsResults { get; set; }
    
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Mails>()
        .HasOne(b => b.MailsResult)
        .WithOne(i => i.Mails)
        .HasForeignKey<MailsResult>(b => b.MailsId);
    }
}

public class Mails
{
    public int MailsId { get; set; }
    public string Subject { get; set; }
    public string Body { get; set; }
    public string Recipient { get; set; }

    public MailsResult MailsResult { get; set; }
}

public class MailsResult
{
    public int MailsResultId { get; set; }
    public DateTime CreatedDate { get; set; }
    public string Result { get; set; }
    public string FailedMessage { get; set; }

    public int MailsId { get; set; }
    public Mails Mails { get; set; }
}

[HttpPost]
public async Task<ActionResult<Mails>> PostMails(Mails mails)
{
    MailsResult result = new MailsResult();
         
    result.MailsId = mails.MailsId;
    result.CreatedDate = DateTime.Now;
    result.Result = "OK";
    result.FailedMessage = null;

    _context.Mails.Add(mails);
    _context.MailsResults.Add(result);

    await _context.SaveChangesAsync();

    return CreatedAtAction("GetMails", new { id = mails.MailsId }, mails);
}

У меня в базе связь один к одному, как мне сделать автозаполнение внешнего ключа в таблице MailResult? Я получается заполняю MailResult данными об ошибка связанных с сообщением которое пришло Mails. И поэтому Внешний ключ должен совпадать с id Mails.

Вот такое решение я придумал, но у меня большие сомнения в том что оно правильное:

    _context.Mails.Add(mails);
    await _context.SaveChangesAsync();
            
    result.MailsId = new { id = mails.Id }.id;
    result.CreatedDate = DateTime.Now;
    result.Result = "OK";
    result.FailedMessage = "OK";
    _context.MailsResults.Add(result);
    await _context.SaveChangesAsync();

Ответы (1 шт):

Автор решения: Alexander Petrov

Итак, третья редакция ответа.
Судя по добавленному куску кода, mails - это новая сущность, ещё не существующая в БД.

MailsResult result = new MailsResult { CreatedDate = DateTime.Now, Result = "OK" };

mails.MailsResult = result; // <--

_context.Mails.Add(mails);
_context.MailsResults.Add(result);

await _context.SaveChangesAsync();

Не используйте свойства-ключи напрямую. Используйте навигационные свойства. EF сам задаст необходимые ключи.

→ Ссылка