这些天都在研究asp.net mvc 由于.net 基础薄弱完全是个菜鸟,遇到了很多麻烦,在使用asp.net mvc +ef code first添加记录遇到一个错误:一个实体对象不能由多个 IEntityChangeTracker 实例引用,通过百度谷歌搜索,本人的解决方法是:
public partial class Category { public int ID { get; set; } [Display(Name = "栏目名称")] [StringLength(50), Required(ErrorMessage = "栏目名称不能为空!")] public string CategoryName { get; set; } public virtual WebModel WebModel { get; set; } } public partial class WebModel { public int ID { get; set; } [Display(Name = "模型名称"), Required(ErrorMessage = "模型名称不能为空"), StringLength(20, ErrorMessage = "模型名称不能太长")] public string ModelName { get; set; } [Display(Name = "模型代码")] [Required(ErrorMessage = "模型代码不能为空")] [RegularExpression("^[a-zA-Z][\\w]{3,15}",ErrorMessage="只能是字母数字和下划线组合,并且长度在3-15")] [StringLength(15)] public string CodeName { get; set; } public virtual ICollection<Category> Categories { get; set; } }
webmodel _M= m_dal.getbyid(id)
Category category=new Category{webmodel=_m,....}
dbset.Attach(category)//添加这句就没有错了
dbset.Add(category) //这里发生错误
错误原因:由于每一个实体对象都生成一个IEntityChangeTracker,所以产生错误,Attach是把实体对象附加到 dbset, 更新数据的时候就不需要多个实体对象。总之就是只能更新一个实体对象。
注:代码只是部分。