Bee*_*ice 3 entity-framework entity-framework-core asp.net-core
直到.donet core 2.2中使用的EF核心版本,在该.Add命令之后,EF用一个大的负数填充key列。
3.0 升级后,这种情况不再发生。
这是代码:
var appointment = new Appointment
{
Date = DateTime.Today,
ProfessionalId = schedule.ProfessionalId
};
await service.AddAsync(appointment);
string message = null;
if (service.AddLastPrescription(appointment.Id, schedule.PacienteId))
....
Run Code Online (Sandbox Code Playgroud)
问题是现在“appointment.Id”为零,对服务功能的调用将失败(FK 错误)。
这种行为在 3.0 中是预期的?
添加异步函数
private DbSet<T> dbSet;
public async Task AddAsync(T t)
{
await dbSet.AddAsync(t);
}
Run Code Online (Sandbox Code Playgroud)
其中 T 是 ModelBase:
public class ModelBase
{
[Key]
public int Id { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime UpdatedAt { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这种行为在 3.0 中是预期的?
是的,它是3.0重大更改之一-临时键值不再设置到实体实例上。
建议的解决方案有:
- 不使用商店生成的密钥。
- 设置导航属性以形成关系而不是设置外键值。
- 从实体的跟踪信息中获取实际的临时键值。例如,
context.Entry(blog).Property(e => e.Id).CurrentValue 将返回临时值,即使它blog.Id本身尚未设置。
选项#1 没有意义(显然受影响的地方已经使用存储生成的密钥)。
如果您有导航属性,则选项 #2 更可取。
选项 #3 更接近于之前的行为,但需要访问 db 上下文。
| 归档时间: |
|
| 查看次数: |
1430 次 |
| 最近记录: |