【发布时间】:2011-04-14 17:17:27
【问题描述】:
以下代码从我的活动表中获取所有尚未发布到 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
}
}
【问题讨论】:
-
当然不能通过匿名类型更新数据库。匿名类型不知道数据库,它只是属性的集合。活动表有多少列?真的会有这么多数据吗?
-
这将比现有代码返回的数据多几倍。这可能不是世界末日,但它确实加起来了。我已经厌倦了 EF 要求我编写低效代码的方式(如果你说这是必要的)。
-
@Jonathan Wood - 你不知道你在做什么吗?我们没有说服英孚,因为我们觉得还有很大的改进空间。
-
@JonH:嗯,按照我的想法,要完全理解我正在做的事情的唯一方法就是尝试一下,我一直在这样做。 EF现在风靡一时,如果我学习它,似乎会有更多的咨询机会。但到目前为止,我不喜欢我所看到的。很高兴听到我不是唯一一个。
-
@Jonathan Wood - SAP 也有很多机会。这不是因为它是多么伟大的产品。这完全是由于产品的架构非常糟糕,因此存在“机会”。
标签: c# entity-framework entity-framework-4