人。
我对其他字段的映射和更新有疑问。
让我们上简单的课
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
字段。怎么可能
谢谢。
答案 0 :(得分:-1)
您应将关系成员定义为虚拟成员,并解决所有问题:
public class User
{
[Key]
public Guid Id { get; set; }
public string SameField { get; set; }
public virtual AuxClass AuxClass { get; set; }
}
public class AuxClass
{
public Guid Id { get; set; }
public string? AuxField { get; set; }
public Guid UserId { get; set; }
public virtual User User { get; set; }
}