【发布时间】:2012-04-13 09:38:12
【问题描述】:
有人可以帮我解决这个问题吗:
代码:
Role r = new Role { ID = 1, Name = "Members" };
ctx.Roles.Attach(r);
//Saving User
User u = new User {
Login = login,
Password = password,
Status = 1
};
u.Roles.Add(r);
ctx.Users.Add(u);
ctx.SaveChanges();
我正在尝试使用现有角色保存新用户。 User 和 Role 类有 fluent-api 映射的多对多关系如下:
modelBuilder.Entity<User>()
.HasMany(u => u.Roles)
.WithMany(r => r.Users)
.Map(x => {
x.ToTable("USER_ROLE_XREF", dbsch);
x.MapLeftKey("ID_USER");
x.MapRightKey("ID_ROLE");
});
但是当 SaveChanges 被调用时,我得到了这个错误: {"指定的值不是 'Edm.Decimal' 类型的实例\r\n参数名称:值"}
实际上,我总是尝试使用单个 SaveChanges() 调用来保存相关实体,但我得到了同样的错误。所以,我必须做的是打多个电话,所以效果很好:
Role r = new Role { ID = 1, Name = "Members" };
ctx.Roles.Attach(r);
//Saving User
User u = new User {
Login = login,
Password = password,
Status = 1
};
ctx.Users.Add(u);
ctx.SaveChanges();
//Assigning Member Role
u.Roles.Add(r);
ctx.SaveChanges();
据我了解,EF 支持通过一次 SaveChanges 调用保存多个更改,所以我想知道这里出了什么问题。
【问题讨论】:
标签: c# oracle ef-code-first odp.net entity-framework-4.3