【发布时间】:2014-03-10 17:58:11
【问题描述】:
我有以下 Post Edit 操作方法:-
[HttpPost]
[ValidateAntiForgeryToken]
[CheckUserPermissions(Action = "Edit", Model = "StorageDevice")]
public ActionResult Edit(SDJoin sdj, FormCollection formValues)
{
//code goes here
if (ModelState.IsValid)
{
repository.Save();
catch (DbUpdateConcurrencyException ex)
{
var entry = ex.Entries.Single();
var databaseValues = (TMSStorageDevice)entry.GetDatabaseValues().ToObject();
var clientValues = (TMSStorageDevice)entry.Entity;
var databaseTechnology2 = repository.FindTechnology2(sdj.StorageDevice.TMSStorageDeviceID);
if (sdj.NetworkInfo.IPAddress != databaseTechnology2.TechnologyIPs.SingleOrDefault(a=>a.IsPrimary == true).IPAddress )
ModelState.AddModelError("NetworkInfo.IPAddress", "Value Has Changed "
);
if (sdj.NetworkInfo.MACAddress != databaseTechnology2.TechnologyIPs.SingleOrDefault(a => a.IsPrimary == true).MACAddress)
ModelState.AddModelError("NetworkInfo.MACAddress", "Value Has Changed "
);
if (databaseValues.RackID != clientValues.RackID)
ModelState.AddModelError("StorageDevice.RackID", "Value Has Changed "
);
但是目前从
返回的值var databaseTechnology2 = repository.FindTechnology2(sdj.StorageDevice.TMSStorageDeviceID);
将返回服务器内部的缓存值,而不是检索当前数据库值。存储库方法是:-
public Technology FindTechnology2(int id)
{
return tms.Technologies.Include(a=>a.TechnologyIPs).SingleOrDefault(a => a.TechnologyID == id);
}
谁能给点建议?
【问题讨论】:
-
这可能是您在同一上下文中查询的问题。您可以尝试使用 MergeOption.OverwriteChanges 解决它,如此处所述 (stackoverflow.com/questions/6126845/…)
-
我尝试编写诸如“ObjectQuery query = entities.TechnologyRoles;”之类的东西但我收到以下错误:无法将类型“System.Data.Entity.DbSet
”隐式转换为“System.Data.Objects.ObjectQuery”
标签: asp.net asp.net-mvc linq entity-framework asp.net-mvc-4