0

ここに私の問題があります:

名前などのいくつかの属性を含むデータベースがあります。しかし、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。

助言がありますか?(何か忘れていたら教えてください):)

4

1 に答える 1

0

やり方がわかった。追加するだけでした

@Html.HiddenFor(model => model.Environment.ID)
@Html.HiddenFor(model => model.Environment.IIS.IISSettingsID)
@Html.HiddenFor(model => model.Environment.SQL.SQLSettingsID)

私の編集ビューに。そして、これは EnvironmentController 内の私の Edit() メソッドに:

db.Environments.Attach(Environment);
db.Entry(Environment).State = EntityState.Modified;
db.Entry(Environment.IIS).State = EntityState.Modified;
db.Entry(Environment.SQL).State = EntityState.Modified;
于 2013-07-24T14:07:31.340 に答える