Asp.net core 如何避免在EF Core中插入后选择插入的实体?
我在Azure DB上有很多只用于日志目的的插入,我看到现在大部分DTU的使用都是通过这个日志记录的 数据库的负载不是因为插入本身,而是因为插入之后,而是因为数据库正在生成Asp.net core 如何避免在EF Core中插入后选择插入的实体?,asp.net-core,.net-core,azure-sql-database,entity-framework-core,Asp.net Core,.net Core,Azure Sql Database,Entity Framework Core,我在Azure DB上有很多只用于日志目的的插入,我看到现在大部分DTU的使用都是通过这个日志记录的 数据库的负载不是因为插入本身,而是因为插入之后,而是因为数据库正在生成CreationDate字段,并且EFCore在插入之后选择它 为了解决“datetime2”错误转换,我将CreationDate字段定义为entity.Property(e=>e.CreationDate).HasColumnType(“datetime”).HasDefaultValueSql(“getdate()”)
CreationDate
字段,并且EFCore在插入之后选择它
为了解决“datetime2”错误转换,我将CreationDate
字段定义为entity.Property(e=>e.CreationDate).HasColumnType(“datetime”).HasDefaultValueSql(“getdate()”)代码>
因此,EF在insert之后调用DB:
(@p0 uniqueidentifier)SELECT [CreationDate]
FROM [MyLogs]
WHERE @@ROWCOUNT = 1 AND [Id] = @p0
有没有办法避免这种行为,让实体在插入后不被跟踪
目前,我看到的唯一方法是忽略实体模型中的CreationDate字段,因为它没有被使用<代码>实体.Ignore(e=>e.CreationDate)代码>您不需要忽略该属性。创建默认构造函数并从服务器端初始化属性
public class User
{
public User()
{
this.CreationDate= Datetime.UTC.Now;
}
public int UserId {get;set;}
public Datetime CreationDate {get;set;}
}
它将在初始化类时执行。目前没有简单的方法。在EF repo上存档以跟踪功能如果实体框架没有提供您所期望的结果/性能,对我来说,这表明这是一种更适合存储过程或自定义SqlCommand
@mathijspim的情况。这是一种解决方法,但不是很好的方法,因为它意味着用.NET代码编写SQL代码我不同意,我认为实体框架的要点是让基线快速运行。一旦复杂性超过标准CRUD操作,或者如果性能是一个特性(事实就是这样),那么您需要降低级别。任何东西都可以抽象,这是我不想争论的观点,因为根据具体情况,所有的选择都是可能的。然而,在我的例子中,我解决了它,等待一个很好的解决方案。将请求放在另一个线程中,2。不时存档庞大的日志表,3。为了那种工作而摆脱Azure