ここに私の問題があります:
名前などのいくつかの属性を含むデータベースがあります。しかし、IISSettings と SQLSettings という 2 つの特定の属性もあります。
public class Environment
{
public int ID { get; set; }
public string Name { get; set; }
public virtual SQLSettings SQL { get; set; }
public virtual IISSettings IIS { get; set; }
...
}
IISSettings と SQLSettings には、外部キーの名前と ID の両方が含まれています。
環境を更新しようとして、IISSettings または SQLSettings の属性のみを変更すると、Visual Studio は、おそらく「標準」属性では何も変更されていないため、何も変更されていないと通知します。変更された唯一のものは、IISSettings または SQLSettings 内の値です。そこで、IISSettings または SQLSettings のみを更新したい場合に、変更をデータベースに保存する方法を知りたいと思いました。
私のビューモデル:
public class EnvironmentViewModel : ViewModelBase
{
public Environment Environment { get; set; }
public IISSettings IISSettings { get; set; }
public SQLSettings SQLSettings { get; set; }
//create/details/delete functions etc.
internal void Edit()
{
try
{
db.Entry(Environment).State = EntityState.Modified;
db.SaveChanges();
}
catch (DbUpdateConcurrencyException ex)
{
Debug.WriteLine("\nDbUpdateConcurrencyException : " + ex);
}
}
...
}
ViewModelBase は、私のデータベースが設定されている場所です。標準 DbSet :
public class ViewModelBase
{
protected MyDBContext db = new MyDBContext ();
}
と
public class MyDBContext : DbContext
{
public MyDBContext()
: base()
{
}
public DbSet<Environment> Environments { get; set; }
}
作業コード:
<div class="editor-label">
@Html.LabelFor(model => model.Environment.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Environment.Name)
@Html.ValidationMessageFor(model => model.Environment.Name)
</div>
動作しないコード:
<div class="editor-label">
@Html.LabelFor(model => model.Environment.IIS.IISServer)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Environment.IIS.IISServer)
@Html.ValidationMessageFor(model => model.Environment.IIS.IISServer)
</div>
変更をデータベースに保存しようとして、SQLSettings の名前だけを変更したときにエラーが発生します。DbUpdateConcurrencyException。
助言がありますか?(何か忘れていたら教えてください):)