0

这是我的问题:

我有一个包含名称等属性的数据库。但我也有 2 个特定属性,它们是 IISSettings 和 SQLSettings。

  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 是我的数据库设置的地方。标准数据库集:

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 回答