如何按实体框架核心选择和更新特定的列?

发布于 2025-02-14 02:21:16 字数 882 浏览 17 评论 0原文

我现在正在尝试将RAW SQL转换为EF Core。 我的表有许多列,例如第1至10列,我需要选择和更新特定的列。像这样的原始代码:

SELECT column1, column2 FROM table WHERE key = "someKey"

(processing data)

UPDATE table SET column2 = someValue WHERE key = "someKey"

首先,我尝试过这样的代码:

var query = 
  from model in context
  where key == "someKey"
  select model;

query.First().column2 = someValue;
context.SaveChanges();

此代码正如我希望的那样效果很好,但是SQL类似地生成:

SELECT key, column1, column2, ... column10 FROM table WHERE key = "someKey"

我不希望选择无用的列,因此我尝试了此操作:

var query = 
  from model in context
  where key == "someKey"
  select new myDTO
  {
    Item1 = model.column1,
    Item2 = model.column2
  };

query.First().Item2 = someValue;
context.SaveChanges();

此代码生成了我希望的SQL语句,但是无法生成更新语句。 (显然,MyDTO未注册到DBContext) 我该如何使用EF核心进行操作?

I'm trying to convert raw SQL to EF core now.
my table has many columns, such as column1 to 10, and I need to select and update specific columns. original code like this :

SELECT column1, column2 FROM table WHERE key = "someKey"

(processing data)

UPDATE table SET column2 = someValue WHERE key = "someKey"

first, I tried like this :

var query = 
  from model in context
  where key == "someKey"
  select model;

query.First().column2 = someValue;
context.SaveChanges();

this code works very fine as I wished, but SQL generated like this :

SELECT key, column1, column2, ... column10 FROM table WHERE key = "someKey"

I do not want select useless columns so I tried this:

var query = 
  from model in context
  where key == "someKey"
  select new myDTO
  {
    Item1 = model.column1,
    Item2 = model.column2
  };

query.First().Item2 = someValue;
context.SaveChanges();

this code generates SELECT SQL statement exactly I wished, but cannot generate update statement. (obviously, myDTO is not registered into DbContext)
How can I do this with EF Core?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

城歌 2025-02-21 02:21:16

您可以使用附加条目方法来跟踪对实体模型的更改。要确定模型您需要所有键

var query = 
  from model in context
  where key == "someKey"
  select new myDTO
  {
    Id = model.Id,
    Item1 = model.column1,
    Item2 = model.column2
  };

var dto = query.First();

// Here I'm using Entity but you should use the right type
var entityyModified = new Entity();
entityModified.Id = dto.Id;
entityyModified.Item1 = dto.Item1;
entityyModified.Item2 = dto.Item2;

// ...
// Item1 or Item2 properties can be assigned to different values
// ...

// Save the changes
context.Attach(entityyModified);
var dbEntry = context.Entry(entityyModified);
dbEntry.Property(e => e.Item1).IsModified = true;
dbEntry.Property(e => e.Item2).IsModified = true;
context.SaveChanges();

You can use Attach and Entry methods to track the changes to a entity model. To identify the model you would need all the keys (here I'm considering only one primary key: Id)

var query = 
  from model in context
  where key == "someKey"
  select new myDTO
  {
    Id = model.Id,
    Item1 = model.column1,
    Item2 = model.column2
  };

var dto = query.First();

// Here I'm using Entity but you should use the right type
var entityyModified = new Entity();
entityModified.Id = dto.Id;
entityyModified.Item1 = dto.Item1;
entityyModified.Item2 = dto.Item2;

// ...
// Item1 or Item2 properties can be assigned to different values
// ...

// Save the changes
context.Attach(entityyModified);
var dbEntry = context.Entry(entityyModified);
dbEntry.Property(e => e.Item1).IsModified = true;
dbEntry.Property(e => e.Item2).IsModified = true;
context.SaveChanges();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文