2016-11-28 219 views
0

我新的EF代碼首先,當我嘗試實施同一所面臨的誤差跟蹤,EF代碼優先 - System.InvalidOperationException

操作 - 當運行應用程序:

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'。

enter image description here

enter image description here

請幫我解決這個問題,我不能採取更進一步:-(

有了這個,請找到下面的模型和對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

在你的更新方法中,它會被下注之三,如果你擺脫existingRecord可變的,只是一起去:

_contex.Entry(model).State = System.Data.Entity.EntityState.Modified; 
_context.SaveChages(); 

與插入方法相同的:

_context.GroupePrivilages.Add(model); 
_context.SaveChages(); 

另外: