这是我的问题:
我有一个包含名称等属性的数据库。但我也有 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。
有什么建议么?(如果我忘记了什么请告诉我):)