gpt4 book ai didi

c# - 使用 EF 和 LINQ 减少访问数据库的次数

转载 作者:行者123 更新时间:2023-11-30 19:28:11 27 4
gpt4 key购买 nike

考虑以下代码:

// check record exists

Adjuster adj = new Adjuster();

if (db.Adjusters.Where(x => x.userID == user.id).Any())
{
adj = db.Adjusters.Where(x => x.userID == user.id).FirstOrDefault();
}
else
{
// create adjuster record
adj.id = Guid.NewGuid();
adj.userID = user.id;

db.Adjusters.InsertOnSubmit(adj);
}

请注意我是如何先调用 .Any() 然后再调用 .FirstOrDefault() 的。这将是对数据库的两个单独查询,对吗?我怎样才能将其限制为只有一个?

现在,考虑以下代码:

adj.isPropertyAdjuster = user.SomeEntity.someProperty;
adj.isCasualityLiabilityAdjuster = user.SomeEntity.someProperty;
adj.isLargeLossAdjuster = user.SomeEntity.someProperty;

db.SubmitChanges();

使用 LINQ/EF,我可以访问彼此有关系的不同实体。但是,这不会导致对数据库的多次调用,每次我这样做吗?例如,所有这三个单独的数据库调用?

adj.isPropertyAdjuster = user.SomeEntity.someProperty;
adj.isCasualityLiabilityAdjuster = user.SomeEntity.someProperty;
adj.isLargeLossAdjuster = user.SomeEntity.someProperty;

如何将其限制为对数据库的单一调用?我认为唯一的方法是像这样实例化一个对象:

SomeEntity obj = user.SomeEntity;

然后,像这样调用属性:

adj.isPropertyAdjuster = obj.someProperty;

你有什么想法?

最佳答案

关于第一个问题:

var adjuster = db.Adjusters.FirstOrDefault(x => x.userID == user.id);
if (adjuster == null)
{
// create adjuster record
adjuster.id = Guid.NewGuid();
adjuster.userID = user.id;

db.Adjusters.InsertOnSubmit(adjuster);
}

关于第二个,我相信 EF 在加载数据时会缓存数据,因此您对 user.SomeEntity.someProperty 的第一次访问将命中数据库,但所有后续访问都不会。你可能想看看 Eager Loading , 不过。

关于c# - 使用 EF 和 LINQ 减少访问数据库的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16406146/

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