繁体   English   中英

具有实体框架的临时实体

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM