[英]Temporary Entities with Entity Framework
我有一个名为Pathway的EntityObject,它直接与路径表中的数据相关。 我的数据库还存储Pathway定制的规则。 我想做的是在我的代码中创建一个Pathway对象,该对象是Pathway + PathwayCustomisations的结果。 结果永远都不会找到返回数据库的方式,它只是代码中使用的临时投影。
public static Pathway ApplyCustomisation(Pathway p, ICollection<PathwayCustomisation> c)
{
Pathway resultant = new Pathway();
if (!p.PathwayModule.IsLoaded) p.PathwayModule.Load();
foreach (PathwayModule m in p.PathwayModule)
{
resultant.PathwayModule.Add(m);
}
foreach (PathwayCustomisation i in c)
{
switch (i.Command)
{
case "ADD":
resultant.PathwayModule.Add(i.PathwayModule);
break;
case "DELETE":
resultant.PathwayModule.Remove(i.PathwayModule);
break;
}
}
return resultant;
}
此方法首先遇到障碍,因为当它们只能属于模型/数据库中的一个实体时,我将PathwayModule实体添加到第二个Pathway中:
CoursePlanner.Test.PathwayTest.ApplyCustomisation:
System.InvalidOperationException : Collection was modified; enumeration operation may not execute.
有没有一种容易使用实体投影的方法? 我是否正确解决了这个问题?
编辑:
仅使用方法的第一部分时,我仍然会遇到异常:
public static Pathway ApplyCustomisation(Pathway p, ICollection<PathwayCustomisation> c)
{
Pathway resultant = new Pathway();
if (!p.PathwayModule.IsLoaded) p.PathwayModule.Load();
foreach (PathwayModule m in p.PathwayModule)
{
resultant.PathwayModule.Add(m);
}
return resultant;
}
上面的枚举没有修改要枚举的同一集合,而只是将项目添加到第二个集合中。 此代码给出了相同的例外。
.NET3.5,C#,VS Express 2008
谢谢,
丹尼尔
您的例外是由于您在枚举时正在修改集合而引起的。
foreach (Item item in collection)
{
collection.Add(something); // Not allowed.
collection.Remove(something); // Not allowed, too.
}
使用像普通对象这样的实体没有问题-您只能避免将实体附加到对象上下文(通过相关实体直接或间接),并且它们不会持久化到数据库中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.