У меня есть класс DAO, который обновляет объект, полученный из клиентского приложения.Поэтому я присоединяю сущность к контексту, но если для связанной сущности в клиенте задано значение NULL, после сохранения для ключа foreingn в базе данных не устанавливается значение NULL, а затем, когда я запрашиваю сущность, связанная сущность все еще там.
Как я могу удалить ключ в этом случае?(Я не могу проверить каждое свойство вручную, потому что модель слишком большая)
EDIT: Это прекрасно работает, когда я запрашиваю de entity в dbcontext, проблема заключается в том, чтоизменено в клиенте и затем присоединено к dbcontext.
Это пример: когда я устанавливаю person.Address.Neighborhood = null;
свойство NeighborhoodId все еще 7 в int Адрес Таблица.
var person = new Person
{
Id = 1,
Name = "Juan",
Adress = new Address
{
Id = 3,
StreetName = "Calle Falsa",
StreetNumber = "123",
Neighborhood = new Neighborhood
{
Id = 7,
Description = "my Neighborhood"
},
}
};
person.Address.Neighborhood = null;
_context.Attach(person);
_context.Entry(person).State = EntityState.Modified;
var unchange = _context.ChangeTracker.Entries().Where(e => e.State == EntityState.Unchanged).ToList();
if (unchange != null && unchange.Count > 0)
{
foreach (var unaEntidad in unchange )
{
_context.Entry(unaEntidad.Entity).State = EntityState.Modified;
}
}
_context.SaveChanges();
РЕДАКТИРОВАТЬ: Классы:
public class Person
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Address Address { get; set; }
}
public class Address
{
public virtual int Id { get; set; }
public virtual string StreetName { get; set; }
public virtual string StreetNumber { get; set; }
public virtual Neighborhood Neighborhood { get; set; }
}
public class Neighborhood
{
public virtual int Id { get; set; }
public virtual string Description { get; set; }
}