2

我在 C# 中学习 ORM。当我将寄存器添加到寄存器表时,会显示错误。我的课是。

 using System;
 using System.Collections.Generic;
 using System.Linq;using System.Text;

 namespace PreSchool

 {

    public class Child
     {

         public int ChildId {get; set;}
         public string Name { get; set; }
         public string Surname { get; set; }
         public virtual List<Register> Registers { get; set; }


         public Child()
         {          
           this.Registers = new List<Register>();
         }
     }

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.ComponentModel.DataAnnotations;

 namespace PreSchool
 {
     public  class Register //partial
     {

         public int RegisterId { get; set; }
         public DateTime dt_in { get; set; }
         public DateTime dt_out { get; set; }
         public virtual Child Child { get; set; } 
     }
 }

功能

  private void button1_Click(object sender, RoutedEventArgs e)
         {
             using (var db = new ChildContext())
             {

             Child bla= ChildrenGrid.SelectedItem as Child ;              
             var reg = new Register() {  dt_in = DateTime.Now, dt_out = DateTime.Now };          
             bla.Registers.Add(reg);     
             db.SaveChanges();
             }
         }

早些时候我遇到了一个问题,我不得不在注册类中添加“部分”来编译项目,但现在它不是必需的(为什么?)。来自主题的错误显示在这个地方:bla.Registers.Add(reg);

谢谢你的帮助 !

4

1 回答 1

1

看起来好像您正在尝试将Register对象添加到已处置的上下文中。如果您将记录绑定到网格,那么当您检索它们时它们将不再附加到数据库,您需要重新拉取对象并更新它,例如

using (var db = new ChildContext())
{
    // get the id of the selected child
    var childId = (ChildrenGrid.SelectedItem as Child).ChildId;
    // pull that record from the "live" context
    Child entity = db.Child.Single(x => x.ChildId == childId);
    // add the new record to the "live" entity
    entity.Registers.Add(new Register
    {
        dt_in = DateTime.Now,
        dt_out = DateTime.Now
    });
    db.SaveChanges();
}

仅供参考 - 为您的 UI 使用视图模型而不是实际的数据库实体通常是一个更好的主意。

于 2013-09-18T08:45:15.270 回答