“收集具有固定的大小”EF4与POCO的例外情况

时间:2010-10-18 07:07:50

标签: c# wcf entity-framework-4

我正在使用带有WCF和POCO的EF4。 我删除了POCO实体中的所有虚拟关键字。

我有员工和团队实体,两者之间的关系是1:N,意味着一个员工只能分配一个团队。

我想在现有团队中添加新员工。 以下代码位于客户端。

private void btnAdd_Click(object sender, RoutedEventArgs e)
        {
            Team teamFromDb = ServiceProxy.GetService.GetTeamById(181);
            Employee newEmp = new Employee{ UserName="username"};
            newEmp.Team = teamFromDb;
            ServiceProxy.GetService.AddEmployee(newEmp);                
        }

以下代码位于服务器端(Dao层)

public void AddEmployee(Employee emp)
        {
            ctx.Employees.AddObject(emp);
        }

        public Team GetTeamById(int teamId)
        {
            return ctx.Teams.Where(t => t.TeamId == teamId).FirstOrDefault();
        }

问题是当我将teamFromDb实例添加到客户端代码中的newEmp.Team属性时,我收到了“Collection is a fixed size”异常。

我是否需要添加更多代码才能修复?

此外,使用POCO类和WCF插入/更新/删除作业需要什么

提前致谢。

3 个答案:

答案 0 :(得分:1)

您是否尝试将ICollection替换为FixupCollection以生成代理实体(类)? 如果您将WCF与实体框架POCOs

一起使用,这可能会有所帮助

答案 1 :(得分:0)

答案 2 :(得分:0)

这是一个非常古老的问题。但是我今天遇到了。只是想分享一下我解决了什么问题。

对我来说,原因是我有这样的事情

Company company = _dbContext.Company.First()
company.Employees = company.Employees.Where(e => e.age > 30);

第二行搞乱了我的上下文,因为公司和员工有 FK 限制。

要修复,只需简单地使用局部变量

var tmpList =  company.Employees.Where(e => e.age > 30);