gpt4 book ai didi

LINQ to SQL 缓存问题

转载 作者:行者123 更新时间:2023-12-05 01:03:39 25 4
gpt4 key购买 nike

这应该很简单。

我的 LINQ to SQL (C# 3.5/SQL Server) 运行良好,两个表之间有一个简单的关系 session session 参会人 .

我已经创建并提交了 session ,然后我加 3 session 参会人使用以下代码(重复 3 次):

ConferenceAttendee NewAttendee = new ConferenceAttendee();
NewAttendee.ConferenceId = ConferenceID;
NewAttendee.Name = ContactName;
NewAttendee.Email = ContactEmail;
db.ConferenceAttendees.InsertOnSubmit(NewAttendee);
db.SubmitChanges();

效果很好,我看到 3 名新与会者出现在数据库中。

更新:
然后,使用全新的数据上下文,我尝试以下操作:
string Names = String.Empty;
Conference RequestedConference = db.Conferences.FirstOrDefault(x => x.ConferenceId == ConferenceID);
foreach (ConferenceAttendee Attendee in RequestedConference.ConferenceAttendees)
Names += Attendee.Name + ", ";

但它没有任何相关的参加者附加到它! (它们肯定存在于数据库中并已提交)。但是 RequestedConference.ConferenceAttendees 的计数始终为 0,因此永远不会进入循环。
foreach (ConferenceAttendee Attendee in this.ConferenceAttendees)
{ Names += Attendee.Name; }

我在部分类(class) session 中这样做,我使用了一个名为 PrintAllAttendeeNames() 的方法。

我做错了什么,为什么当这些新的数据上下文已经在数据库中提交时,它们不能通过 LINQ 轻松看到这些相关对象?

(注:我已经试过打电话
db.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues);

无济于事..)

非常感谢

忏悔 更新

我绝对是个白痴。我将 dataContext 设置为静态的。我通常从不这样做,这就是为什么我通常不会遇到延迟加载的问题。

我有这个:
public static MyDataContext db = new MyDataContext(ConfigurationManager.ConnectionStrings["MyDBConnection"].ConnectionString);

当然,改成这样就解决了!!!
public MyDataContext db = new MyDataContext(ConfigurationManager.ConnectionStrings["MyDBConnection"].ConnectionString);

最佳答案

几件事。首先,您应该仅在完成所有更改后提交更改。您无需调用SubmitChanges每次创建新与会者时。首先创建所有三个,InsertOnSubmit每个,然后调用SubmitChanges . LINQ to SQL 将以这种方式生成更高效、更粗的调用。

其次,我对与会者加载问题有点困惑。他们应该在第一次访问 Attendee 时延迟加载。属性(property)。当第一次访问其属性时,每个单独的 session 都会引发单独的查询,因此这不是处理它的最有效方法。您可以告诉 L2S 为您加载的每个 session 对象预加载所有与会者。您可以使用 DataLoadOptions 类来做到这一点:

using (var context = new SomeContext(...))
{
var options = new DataLoadOptions();
options.LoadWith<Conference>(c => c.ConferenceAttendees);

context.LoadOptions = options;

var conferencesWithAttendees = from c in context.Conferences
where c.Year = DateTime.Now.Year
select c;

foreach (var conferenceWithAttendee in conferencesWithAttendees)
{
conferenceWithAttendee.PrintAllAttendeeNames();
}
}

关于LINQ to SQL 缓存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3633122/

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