开发者

"Collection was of a fixed size" Exception in EF4 with POCO

I am using EF4 with WCF and POCO. I removed all virtual keyword in POCO entities.

I have Employee and Team entities and relationship between both is 1:N, means that one employee can be allocated only one team.

And I'd like to add new employee with existing team. Following code is in the client side.

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);                
        }

Following code is in the server side (Dao layer)

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

        public Team GetTeamById(int teamId)
        {
           开发者_高级运维 return ctx.Teams.Where(t => t.TeamId == teamId).FirstOrDefault();
        }

Problem is that I got "Collection was of a fixed size" Exception when I add teamFromDb instance to the newEmp.Team property in the client code.

Do I need to add some more code to fix?

In addition, What do I need to for Insert/Update/Delete job with POCO classes and WCF

Thanks in advance.


Did you tried to replace ICollection to FixupCollection for generated proxy entities(classes)? That may help if you are using WCF with entity framework POCOs


See this question for more info on this problem with the template:

http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/71c04d6a-c8cf-4ef1-be7f-249bf8dc9c63/


This is a super old question. But I ran into it today. Just want to share what I solved it.

For me , the cause is I have something like this

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

And the 2nd line messed up my Context because there are FK restrictions for Company and Employee.

To fix, just simply use a local variable

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜