我是EF Code First的新手,当我尝试按照以下错误实施相同的操作时,
操作 - 运行应用程序时:
1.迁移表后第一次,新的记录成功插入' GroupPrivileges'。
2.更新“GroupPrivileges'它会引发错误。
3.同样,当我尝试在' GroupPrivileges'上插入新的第二条记录时弹出相同的错误。
错误:
类型' System.InvalidOperationException'的例外情况发生在EntityFramework.dll中但未在用户代码中处理
附加信息:类型的对象 ' System.Collections.Generic.List`1 [[Dsms.Model.User.GroupModel, Dsms.Model,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]' 无法在EntityReference的Value属性中设置或删除 类型' Dsms.Model.User.GroupModel'。
请帮我解决这个问题,我无法更进一步: - (
有了这个,请找到以下模型和DBConfig类。
public abstract class BaseModel
{
public int DrivingSchoolId { get; set; }
public int UserId { get; set; }
public string ExternalId { get; set; }
[Display(Name = "Active")]
public bool IsActive { get; set; }
public int CreatedBy { get; set; }
public DateTime CreatedOn { get; set; }
public int ModifiedBy { get; set; }
public DateTime ModifiedOn { get; set; }
public BaseModel()
{
IsActive = true;
CreatedOn = DateTime.Now;
ModifiedOn = DateTime.Now;
ExternalId = Guid.NewGuid().ToString("N");
}
}
public class GroupModel : BaseModel
{
[Key]
public int GroupId { get; set; }
[Display(Name = "Name")]
[DataType(DataType.Text)]
[Required(ErrorMessage = "Please fill the 'Name'")]
[MaxLength(100, ErrorMessage = "Maximum character lenght of 'Name' is 100.")]
public string Name { get; set; }
[Display(Name = "Code")]
[DataType(DataType.Text)]
[Required(ErrorMessage = "Please fill the 'Code'")]
[MaxLength(15, ErrorMessage = "Maximum character lenght of 'Code' is 15.")]
public string Code { get; set; }
[Display(Name = "Description")]
[DataType(DataType.MultilineText)]
[MaxLength(500, ErrorMessage = "Maximum character lenght of 'Description' is 500.")]
public string Description { get; set; }
//EF Navigation properties starts
public virtual ICollection<DrivingSchoolModel> DrivingSchools { get; set; }
public virtual UserGroupModel UserGroup { get; set; }
public virtual GroupPrivilegeModel GroupPrivilege { get; set; }
}
public class RoleModel : BaseModel
{
[Key]
public int RoleId { get; set; }
[Display(Name = "Name")]
[DataType(DataType.Text)]
[Required(ErrorMessage = "Please fill the 'Name'")]
[MaxLength(100, ErrorMessage = "Maximum character lenght of 'Name' is 100.")]
public string Name { get; set; }
[Display(Name = "Code")]
[DataType(DataType.Text)]
[Required(ErrorMessage = "Please fill the 'Code'")]
[MaxLength(15, ErrorMessage = "Maximum character lenght of 'Code' is 15.")]
public string Code { get; set; }
[Display(Name = "Description")]
[DataType(DataType.MultilineText)]
[MaxLength(500, ErrorMessage = "Maximum character lenght of 'Description' is 500.")]
public string Description { get; set; }
//EF Navigation properties starts
public virtual GroupPrivilegeModel GroupPrivilege { get; set; }
public virtual UserRoleModel UserRole { get; set; }
}
public class GroupPrivilegeModel : BaseModel
{
[Key]
public int GroupPrivilegeId { get; set; }
[Display(Name = "Group")]
[DataType(DataType.Text)]
[Required(ErrorMessage = "Please select the 'Group'")]
public int GroupId { get; set; }
[Display(Name = "Role")]
[DataType(DataType.Text)]
[Required(ErrorMessage = "Please select the 'Role'")]
public int RoleId { get; set; }
//EF Navigation properties starts
public virtual ICollection<GroupModel> Groups { get; set; }
public virtual ICollection<RoleModel> Roles { get; set; }
}
public GroupConfiguration()
{
this.ToTable("Groups", DsmsContext.DEFAULT_DB_SCHEMA);
this.HasKey(g => g.GroupId);
this.HasRequired(g => g.DrivingSchools).WithMany().HasForeignKey(g => g.DrivingSchoolId);
this.Property(g => g.ExternalId).HasColumnName("ExternalGroupId").HasMaxLength(50).IsRequired();
this.Property(g => g.Name).HasMaxLength(100).IsRequired();
this.Property(g => g.Code).HasMaxLength(15).IsRequired();
this.Property(g => g.Description).HasMaxLength(500).IsOptional();
this.Property(g => g.DrivingSchoolId).IsRequired();
this.Property(g => g.IsActive).IsRequired();
this.Property(g => g.CreatedBy).IsRequired();
this.Property(g => g.CreatedOn).IsRequired();
this.Property(g => g.ModifiedBy).IsOptional();
this.Property(g => g.ModifiedOn).IsOptional();
this.Ignore(g => g.UserId);
this.Ignore(g => g.UserGroup);
this.Ignore(g => g.GroupPrivilege);
}
public RoleConfiguration()
{
this.ToTable("Roles", DsmsContext.DEFAULT_DB_SCHEMA);
this.HasKey(r => r.RoleId);
this.Property(r => r.ExternalId).HasColumnName("ExternalRoleId").HasMaxLength(50).IsRequired();
this.Property(r => r.Name).HasMaxLength(100).IsRequired();
this.Property(r => r.Code).HasMaxLength(15).IsRequired();
this.Property(r => r.Description).HasMaxLength(500).IsOptional();
this.Property(r => r.IsActive).IsRequired();
this.Property(r => r.CreatedBy).IsRequired();
this.Property(r => r.CreatedOn).IsRequired();
this.Property(r => r.ModifiedBy).IsOptional();
this.Property(r => r.ModifiedOn).IsOptional();
this.Ignore(r => r.DrivingSchoolId);
this.Ignore(r => r.UserId);
this.Ignore(r => r.GroupPrivilege);
this.Ignore(r => r.UserRole);
}
public GroupPrivilegeConfiguration()
{
this.ToTable("GroupPrivileges", DsmsContext.DEFAULT_DB_SCHEMA);
this.HasKey(gp => gp.GroupPrivilegeId);
this.HasRequired(gp => gp.Groups).WithMany().HasForeignKey(gp => gp.GroupId);
this.HasRequired(gp => gp.Roles).WithMany().HasForeignKey(gp => gp.RoleId);
this.Property(gp => gp.IsActive).IsRequired();
this.Property(gp => gp.CreatedBy).IsRequired();
this.Property(gp => gp.CreatedOn).IsRequired();
this.Property(gp => gp.ModifiedBy).IsOptional();
this.Property(gp => gp.ModifiedOn).IsOptional();
this.Ignore(gp => gp.DrivingSchoolId);
this.Ignore(gp => gp.UserId);
this.Ignore(gp => gp.ExternalId);
}
答案 0 :(得分:0)
在您的更新方法中,如果您删除existingRecord
变量并且只需使用以下内容会更好:
_contex.Entry(model).State = System.Data.Entity.EntityState.Modified;
_context.SaveChages();
与插入方法相同:
_context.GroupePrivilages.Add(model);
_context.SaveChages();
此外: