c# – ObjectSet.AddObject()与EntityCollection.Add()
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – ObjectSet.AddObject()与EntityCollection.Add(),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1632字,纯文字阅读大概需要3分钟。
内容图文
假设我有两个EntitySets,“团队”和“玩家”.
我正在为系统添加新的团队,为了争论,让我说我从一个文件中添加了一千个团队(包含重复项).
该系统包含100个团队.我的目标是避免重复,而不为每个添加的团队调用SaveChanges().
该过程是查询newteam尚不存在,然后添加新团队(如果不存在).
var team = (from t in context.Teams
where t.Name == newTeam.Name
select t).FirstOrDefault();
if (team==null)
--Add New Team
如果我使用context.Teams.AddObject(newTeam)添加;或context.AddObject(“团队”,newTeam);
team.Count()将保持为100,如果再次运行查询,var团队将为null.
但是,如果我改为使用player.Teams.Add(newTeam);添加团队,一切都很完美,除了我必须有一个玩家添加NewTeam,该玩家将成为所有新团队的成员.
在调用player.Teams.Add(newTeam)之后;
该查询将返回新团队.
var team = (from t in player.teams
where t.Name = newTeam.Name
select t).FirstOrDefault();
player.Teams.Count()将增加一个.
在第一示例context.Teams是ObjectSet< T>,而在player.Teams.Add Teams是EntityCollection< T>.我认为这些行为会相同,但事实并非如此.
有没有办法使ObjectSet< T>表现得像EntityCollection< T>?我想在从文件中添加所有团队之后只调用一次SaveChanges.
还是有更好的方式,我没有看到?
谢谢!
解决方法:
没有办法让它们表现得一样. ObjectSet表示数据库查询,一旦您使用它,您始终会对新团队尚未出现的数据库进行查询. EntityCollection是已加载实体的本地集合,如果您使用它,则会对应用程序内存进行查询.
通常使用EntityCollection与维护单独的List< Team>完全相同:
List<Team> teams = context.Teams.ToList();
var team = teams.FirstOrDefault(t => t.Name == newTeam.Name);
if (team == null)
{
context.Teams.AddObject(newTeam);
teams.Add(newTeam);
}
context.SaveChanges();
您还可以使用Dictionary< string,Team>并获得可能更好的性能,而不是搜索每个团队的列表.
内容总结
以上是互联网集市为您收集整理的c# – ObjectSet.AddObject()与EntityCollection.Add()全部内容,希望文章能够帮你解决c# – ObjectSet.AddObject()与EntityCollection.Add()所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。