仅使用 Z.EntityFramework.Plus' SingleUpdate 方法更新特定列
Only update specific column using Z.EntityFramework.Plus' SingleUpdate method
在我的项目中,我想使用 Z.EntityFramework.Plus 更新特定数据集的列。我正在使用以下代码:
await db.Features.SingleUpdateAsync(new Feature()
{
ID = featureInfo.ID,
Unit = unit,
});
Feature
class 由多列组成。我只想更新给定 ID
的 Unit
列。但是,此语句总是尝试将所有其他列重置为 null
。所以我认为我误解了这种方法的一般工作原理。
如何只更新给定的单位值而不修改(或必须加载)所有其他值?
您可以使用 Where
和 UpdateFromQuery:
来实现
await db.Features.Where(x => x.ID == featureInfo.ID).UpdateFromQuery(x => new Feature()
{
Unit = unit
});
对于多个ID,如果单位是常量:
await db.Features.Where(x => ids.Contains(x.ID)).UpdateFromQuery(x => new Feature()
{
Unit = unit
});
如果你有 thousand/million 个 ID,也可以使用 WhereBulkContains 方法(这个不是免费的):
await db.Features.WhereBulkContains(ids).UpdateFromQuery(x => new Feature()
{
Unit = unit
});
编辑:回复评论
Is there any documentation for the SingleUpdateAsync method I was using
没有文档。它的工作方式与 BulkUpdate
完全相同,但允许您传递单个实体而不是列表(这是唯一的区别)。
在我的项目中,我想使用 Z.EntityFramework.Plus 更新特定数据集的列。我正在使用以下代码:
await db.Features.SingleUpdateAsync(new Feature()
{
ID = featureInfo.ID,
Unit = unit,
});
Feature
class 由多列组成。我只想更新给定 ID
的 Unit
列。但是,此语句总是尝试将所有其他列重置为 null
。所以我认为我误解了这种方法的一般工作原理。
如何只更新给定的单位值而不修改(或必须加载)所有其他值?
您可以使用 Where
和 UpdateFromQuery:
await db.Features.Where(x => x.ID == featureInfo.ID).UpdateFromQuery(x => new Feature()
{
Unit = unit
});
对于多个ID,如果单位是常量:
await db.Features.Where(x => ids.Contains(x.ID)).UpdateFromQuery(x => new Feature()
{
Unit = unit
});
如果你有 thousand/million 个 ID,也可以使用 WhereBulkContains 方法(这个不是免费的):
await db.Features.WhereBulkContains(ids).UpdateFromQuery(x => new Feature()
{
Unit = unit
});
编辑:回复评论
Is there any documentation for the SingleUpdateAsync method I was using
没有文档。它的工作方式与 BulkUpdate
完全相同,但允许您传递单个实体而不是列表(这是唯一的区别)。