通过silverlight模型向db添加新记录

时间:2012-08-07 19:06:23

标签: c# sql silverlight mvvm

我有一个带有ria项目的silverlight mvvm。我有一个用户界面,管理员用户可以在其中输入信息以创建新的工单。但是,我无法调用数据库并向表中添加新记录。我没有UI的代码隐藏,控件通过命令和命令参数绑定到模型。因此,当用户点击“添加新工作”时,它就会出现,

public class EditJobViewModel : ViewModelBase
{
    private Job _job;

    public Job CurrentJob
    {
        get { return _job; }
        set
        {
            _job = value;
            OnPropertyChanged("CurrentJob");
        }
    }

    public ICommand NewJob
    {
        get
        {
            return new DelegateCommand(BeginNewJob, (o) => true);
        }

    }


    public void BeginNewJob(object o)
    {

            _job = new Job();
            //_job.JobNumber = _job.JobID.ToString();
            _job.AssignedTo = App.userID;
            _job.AddedBy = App.userID;
            _job.FileTypeJob = "PDF";
            _job.AddedTS = DateTime.Now;
            _job.OpenDate = DateTime.Now;
            BeginSave(o);
        }
    }

我遇到问题的地方是在“工作”表格中创建新记录。在我的断点上,它返回它需要的所有列,而不是一个新的'JobID',它是我的主键。这就是我应该尝试创建新记录的方式。

public void BeginSave(object o)
    {
        if (!IsDesignTime)
        {
            try
            {
                if (CurrentJob.EntityState == EntityState.New)
                {
                    CurrentJob.AddedBy = App.userID;
                    CurrentJob.AddedTS = DateTime.Now;
                }
                CurrentJob.UpdatedBy = App.userID;
                CurrentJob.UpdatedTS = DateTime.Now;

                // This is here because of a bug in infragistics grid/Entity Framework 
                foreach (JobFileType ft in CurrentJob.JobFileTypes)
                {
                    if (ft.EntityState != EntityState.Unmodified)
                        (ft as IEditableObject).EndEdit();
                }

                foreach (JobTag tag in CurrentJob.JobTags)
                {
                    if (tag.EntityState != EntityState.Unmodified)
                        (tag as IEditableObject).EndEdit();
                }
                //(CurrentJob as IEditableObject).EndEdit();

                SubmitOperation s = _context.SubmitChanges();
                if (s.HasError)
                { }
            }
            catch (Exception ex)
            { }
        }
    }

除非它永远不会访问EntityState.new。这就是我想的尝试方式。我想有办法从'BeginNewJob'命令做到这一点,但无法找到一种方法来创建一个新的JobID或记录。数据库已经有10000条记录并且有多个用户创建作业,所以我需要一种方法来创建最后一个作业(getMaxID()??)并适当增加,在现场创建一个新作业。

1 个答案:

答案 0 :(得分:1)

如果你对id列使用guid类型,你将不需要找到下一个id,这种方法会将新对象与以前的对象分离。