ria プロジェクトを使用した Silverlight mvvm があります。管理者ユーザーが情報を入力して新しい作業指示書を作成できる UI があります。ただし、データベースを呼び出してテーブルに新しいレコードを追加するのに問題があります。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);
}
}
私が問題を抱えているのは、「Job」テーブルに新しいレコードを作成することです。私のブレークポイントでは、必要なすべての列を返しますが、主キーである新しい「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()??) を取得し、適切にインクリメントしてその場で新しいジョブを作成する方法が必要です。