首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IList<Item>集合类访问数据库

IList<Item>集合类访问数据库
EN

Stack Overflow用户
提问于 2010-03-23 14:19:38
回答 3查看 1.4K关注 0票数 0

我有一个有用户的数据库。用户有物品。

这些项目可以积极改变。如何访问集合类型格式的项?对于用户,我在实例化时填充所有的用户属性。如果我在实例化时加载用户的项,并且项发生了更改,它们将有旧的数据。

我在想,也许我需要一个ItemCollection类,并且在user类之外有一个字段/属性,这样就可以遍历用户的所有条目,我可以使用一个foreach循环。

那么,我的问题是,使用某种集合从数据库访问项目的最佳实践/最佳方法是什么?在访问特定项时,它需要获取最新的数据库信息,当用户执行foreach循环时,必须提供最新的项信息。

我想做的是

代码语言:javascript
运行
复制
Console.WriteLine(User.Items[3].ID); returns 5.
//this updates the item information and saves it to the database.
User.Items[3].ID = 13; 

//Add a new item to the database.
User.Items.Add(new Item { id = 17});

foreach (Item item in User.Items) {
    //this would traverse all items in the database.
    //not some cached copy at the time of instantiation of the user.
}

编辑:对不起,我把这个问题写错了。我目前正在使用Linq,但是我有将类映射到业务对象的方法。当我对业务对象进行遍历时,我希望它转到Linq数据文本并获取信息。

当我实现一个实现接口ItemCollection的新类“IList”时,我需要做什么来获得它返回的项?

使用User.Items3,是在公共项下实现的这个索引方法。索引方法是否应该使用linq.Skip操作符来获取数据库中项的索引?

我只是对将业务对象集合映射到数据库感到有点困惑。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-23 14:31:40

虽然这是可以做到的,但也需要一些不寻常的要求。

首先,这将在数据库和应用程序之间产生过多的通信量。第二,在并发环境中,这将引入大量的竞赛条件。

仅举一个简单的例子,代码段:

代码语言:javascript
运行
复制
User.Items[3].ID = 13; 
User.Items[3].Color = Color.Blue; 

可以生成不允许的状态,但是由于渴望持久化状态,它至少在数据库中存在一段时间。此外,上面的代码段将访问数据库两次,以便进行简单的更新。在那里,要保证这一变化是原子性的要困难得多。

票数 1
EN

Stack Overflow用户

发布于 2010-03-23 14:23:58

您签出LINQ或实体框架了吗?

它们都提供了与您所需的功能类似的功能:

代码语言:javascript
运行
复制
// Get first user with Id of 5
var users = _dbContext.Users.FirstOrDefault(u => u.Id == 5);

// Loop through all users in the context
foreach(var user in _dbContext.Users)
{
    foreach(var item in user.Items)
    {
        // Work with your item here.
    }
}

您只需确保您管理您的上下文,以便您有最新的信息。

票数 0
EN

Stack Overflow用户

发布于 2010-03-23 14:24:30

您需要在数据库类中实现IList,并在属性更改时写入数据库。

在某些情况下,拥有IList对数据的访问可能是很好的,但是每当有人更改属性时,自动写入数据库就会造成不愉快的情况,当某人更改实例上的20个属性时。

当谈到以类似集合的方式访问数据的最佳方法时,请查看LiNQ。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2500605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档