如果添加的项目可能存在或可能不存在,则添加/更新 EF 实体的最佳方式

发布于 2024-11-30 07:02:46 字数 634 浏览 1 评论 0原文

我需要一些有关使用 EF 添加/更新 SQL 记录的指导。假设我正在编写一个应用程序,将硬盘上的文件信息存储到 EF4 数据库中。当您按下按钮时,它将扫描指定路径(可能是整个驱动器)中的所有文件,并将信息存储在数据库中,例如文件大小、更改日期等。有时文件已经记录了上次运行的情况,所以它的属性应该更新;有时会第一次检测到一批文件,需要添加。

我正在使用 EF4,并且正在寻找添加新文件信息和更新现有记录的最有效方法。据我了解,当我按下搜索按钮并检测到文件时,我将必须检查文件实体是否存在,检索其 ID 字段,并使用它来添加或更新相关信息;但如果它尚不存在,我将需要创建一个表示它及其相关对象(例如其文件夹路径)的树,然后添加它。我还必须处理文件夹路径对象的合并。

我突然想到,如果有数百万个文件(服务器上可能有数百万个文件),则将整个数据库加载到上下文中既不理想也不实用。因此,对于每个文件,我可能必须往返磁盘上的数据库来检测该条目是否已存在,如果存在则检索其 ID,然后再进行另一次更新。有没有一种更有效的方法可以在一次数据库访问中插入/更新多个文件对象树?例如,如果有一个实体上下文方法,例如“如果不存在则插入并如果存在则更新”,那么我可以在一个事务中包装多个吗?

我想这将是一个相当常见的要求,在 EF 中如何最好地完成它?任何想法将不胜感激。(哦,我的数据库是 SQLITE,如果这有什么不同的话)

I need some guidance on adding / updating SQL records using EF. Lets say I am writing an application that stores info about files on a hard disk, into an EF4 database. When you press a button, it will scan all the files in a specified path (maybe the whole drive), and store information in the database like the file size, change date etc. Sometimes the file will already be recorded from a previous run, so its properties should be updated; sometimes a batch of files will be detected for the first time and will need to be added.

I am using EF4, and I am seeking the most efficient way of adding new file information and updating existing records. As I understand it, when I press the search button and files are detected, I will have to check for the presence of a file entity, retrieve its ID field, and use that to add or update related information; but if it does not exist already, I will need to create a tree that represents it and its related objects (eg. its folder path), and add that. I will also have to handle the merging of the folder path object as well.

It occurs to me that if there are many millions of files, as there might be on a server, loading the whole database into the context is not ideal or practical. So for every file, I might conceivably have to make a round trip to the database on disk to detect if the entry exists already, retrieve its ID if it exists, then another trip to update. Is there a more efficient way I can insert/update multiple file object trees in one trip to the DB? If there was an Entity context method like 'Insert If It Doesnt Exist And Update If It Does' for example, then I could wrap up multiple in a transaction?

I imagine this would be a fairly common requirement, how is it best done in EF? Any thoughts would be appreciated.(oh my DB is SQLITE if that makes a difference)

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

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

发布评论

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

评论(1

你与昨日 2024-12-07 07:02:46

您可以检查该记录是否已存在于数据库中。如果没有,请创建并添加记录。然后,您可以设置记录的字段,这些字段是插入和更新时常用的,如下面的示例代码所示。

           var strategy_property_in_db = _dbContext.ParameterValues().Where(r => r.Name == strategy_property.Name).FirstOrDefault();
            if (strategy_property_in_db == null)
            {
                strategy_property_in_db = new ParameterValue() { Name = strategy_property.Name };
                _dbContext.AddObject("ParameterValues", strategy_property_in_db);
            }
            strategy_property_in_db.Value = strategy_property.Value;

You can check if the record already exists in the DB. If not, create and add the record. You can then set the fields of the record which will be common to insert and update like the sample code below.

           var strategy_property_in_db = _dbContext.ParameterValues().Where(r => r.Name == strategy_property.Name).FirstOrDefault();
            if (strategy_property_in_db == null)
            {
                strategy_property_in_db = new ParameterValue() { Name = strategy_property.Name };
                _dbContext.AddObject("ParameterValues", strategy_property_in_db);
            }
            strategy_property_in_db.Value = strategy_property.Value;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文