У меня есть таблица адресов и таблица состояний в моей базе данных. Когда я вызываю update для записи адреса в EF Core, я предоставляю Id для существующей записи State. По какой-то причине запрос вставляет новую запись в таблицу состояний вместо поиска существующей записи. У меня есть мой код ниже.
Это код уровня сервиса, который вызывает доступ к данным:
public int UpsertContactInfo(ContactInfo contactInfo)
{
var mailingAddress = new AddressEntity() {
AddressLine1 = contactInfo.mailingAddressLine1,
AddressLine2 = contactInfo.mailingAddressLine2,
City = contactInfo.mailingCity,
ZipCode = contactInfo.mailingZip,
Id = contactInfo.mailingAddressId,
State = new StateEntity(){
Id = contactInfo.mailingStateId
}
};
_addressDataAccess.UpdateAddress(mailingAddress);
и вот мой доступ к данным:
public int UpdateAddress(AddressEntity address)
{
_context.Addresses.Attach(address);
_context.SaveChanges();
return (int)address.Id;
}
ContactInfo:
using System;
namespace LandHawk.DataAccess.Entity
{
public class ContactInfoEntity
{
public int Id { get; set; }
public int PrimaryAddressId { get; set; }
public AddressEntity PrimaryAddress { get; set; }
public int MailingAddressId { get; set; }
public AddressEntity MailingAddress { get; set; }
}
}
Состояние:
using System;
namespace LandHawk.DataAccess.Entity
{
public class StateEntity
{
public int Id { get; set; }
public string Name { get; set; }
public string Abbreviation { get; set; }
}
}
Никаких специальных карт не делается. в моей базе данных текст:
public class DatabaseContext : DbContext
{
public DbSet<AddressEntity> Addresses { get; set; }
public DbSet<StateEntity> States { get; set; }
...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<StateEntity>();
modelBuilder.Entity<AddressEntity>()
.Property(a => a.Id)
.ValueGeneratedOnAdd();
Идентификатор адреса определенно равен 1, что соответствует существующей записи в таблице состояний в БД. однако при совершении вызова создается новая запись состояния.