ребята.
У меня проблема с отображением и обновлением дополнительных полей.
Давайте создадим простой класс
public class User
{
[Key]
public Guid Id { get; set; }
public string SameField { get; set; }
public AuxClass AuxClass { get; set; }
}
public class AuxClass
{
public Guid Id { get; set; }
public string? AuxField { get; set; }
public Guid UserId { get; set; }
public User User { get; set; }
}
...
DbSet<User> UserDb { get; set; }
Я ожидаю, что такой запрос
var tst = context.UserDb.AsNoTracking().FirstOrDefaultAsync();
возвращает объект следующим образом:
{
Id = "AD8E1461-D6E8-4A04-8CFE-08D74FED1A72",
SameField = "lala",
AuxClass = null
}
Но я получаю
{
Id = "AD8E1461-D6E8-4A04-8CFE-08D74FED1A72",
SameField = "lala",
AuxClass =
{
Id = "00000000-0000-0000-0000-000000000000",
AuxField = null,
UserId = "00000000-0000-0000-0000-000000000000",
User = null
}
}
Итак, первый вопрос - почему? Второй вопрос - как настроить контекст, чтобы не создавать такой объект с помощью запросов?
И третий вопрос.
Предположим, у меня есть объект класса User, подобный этому:
{
Id = "AD8E1461-D6E8-4A04-8CFE-08D74FED1A72",
SameField = "lala",
AuxClass =
{
Id = "AD8E1461-D6E8-4A04-8CFE-08D74FED1A83",
AuxField = "lalala",
UserId = "AD8E1461-D6E8-4A04-8CFE-08D74FED1A72",
User = User
}
}
Я делаю запрос var tst = context.UserDb.AsNoTracking().FirstOrDefaultAsync();
, поэтому у меня есть часть объекта из базы данных и вносим изменения:
{
Id = "AD8E1461-D6E8-4A04-8CFE-08D74FED1A72",
SameField = "lala12345",
AuxClass = null
}
Я хочу обновить этот объект в базе данных. Я хочу написать код, подобный этому
context.UserDb.Update(tst);
await context.SaveChangesAsync(true);
, не стирая поле AuxClass
в объекте, хранящемся в базе данных. Как это возможно?
Спасибо.