gpt4 book ai didi

c# - 通过匿名类型更新数据库?

转载 作者:行者123 更新时间:2023-12-02 17:31:29 25 4
gpt4 key购买 nike

以下代码从我的“事件”表中获取尚未发布到 Twitter 上的所有行。然后它循环遍历并发布每一行的 Twitter 更新。在此过程中,我想更新数据库以指示这些行现已被“推特”。

但是,当我尝试更新此值时,出现错误(如下所示)。我认为这是因为我使用的是匿名类型。但是,如果我使用完整类型,则需要从数据库中提取大量不必要的数据。

有没有办法可以有效地实现这一点?或者这是 EF 迫使我在性能上做出妥协的又一个例子?

using (MyEntities context = new MyEntities())
{
var activities = from act in context.Activities
where act.ActTwittered == false
select new { act.ActID, act.ActTitle, act.Category,
act.ActDateTime, act.Location, act.ActTwittered };

foreach (var activity in activities)
{
twitter.PostUpdate("...");
activity.ActTwittered = true; // <== Error: ActTwittered is read-only
}
}

最佳答案

您可以尝试像这样的“假对象方法”:

using (MyEntities context = new MyEntities())
{
var activities = from act in context.Activities
where act.ActTwittered == false
select new { act.ActID, act.ActTitle, act.Category,
act.ActDateTime, act.Location, act.ActTwittered };

foreach (var activity in activities)
{
twitter.PostUpdate("...");

// Create fake object with necessary primary key
var act = new Activity()
{
ActID = activity.ActID,
ActTwittered = false
};

// Attach to context -> act is in state "Unchanged"
// but change-tracked now
context.Activities.Attach(act);

// Change a property -> act is in state "Modified" now
act.ActTwittered = true;
}

// all act are sent to server with sql-update statements
// only for the ActTwittered column
context.SaveChanges();
}

这是“理论”代码,不确定它是否有效。

编辑

不再是“理论”了。我已经使用 EF 4.1 的 DbContext 对此进行了测试,它的工作原理如上面的示例代码中所述。 (因为 DbContext 只是 ObjectContext 的包装 API,所以几乎可以肯定地假设它也适用于 EF 4.0。)

关于c# - 通过匿名类型更新数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5667046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com