相关疑难解决方法(0)

如何比较.NET中的SQL时间戳?

我已经映射了实体框架实体.SQL Server 2008中的每个表都包含Timestamp列,该列被映射为字节数组.数组的长度始终为8.

现在我需要比较.NET中的时间戳值.我有两个解决方案,但我不知道哪个更好?

  • 比较它作为数组.当第一对字节不同时返回false.
  • 将字节数组转换为long,比较long.

哪种解决方案更好?或者还有其他解决方案吗?

.net c# sql-server

11
推荐指数
2
解决办法
6055
查看次数

何时在Entity Framework 4中使用ApplyOriginalValues?

我使用了ApplyCurrentValues.

但是不要真正理解ApplyOriginalValues.它与ApplyCurrentValues有什么不同?我应该什么时候使用它?

我已阅读文档.但仍然困惑.

entity-framework-4

8
推荐指数
1
解决办法
4388
查看次数

ASP.NET MVC +实体框架与并发检查

我想实现一个应用程序在此页面样本如下:http://www.asp.net/entity-framework/tutorials/handling-concurrency-with-the-entity-framework-in-an-asp-net- MVC应用程序

我有一个带有Timestamp的域类作为并发检查字段:

public class PurchaseOrder {
    [Timestamp]
    public byte[] Timestamp {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

在我的Edit.aspx中,我将Timestamp作为隐藏字段(我正在使用视图模型):

<%: Html.HiddenFor(model => model.PurchaseOrder.Timestamp) %>
Run Code Online (Sandbox Code Playgroud)

这是我的Edit()方法:

public ActionResult Edit(int id, FormCollection collection) {
     var purchaseOrder = db.PurchaseOrders.Find(id);
     UpdateModel(purchaseOrder, "PurchaseOrder", collection);

     db.Entry(purchaseOrder).State = EntityState.Modified;
     db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

我同时在2个独立的浏览器中打开了相同的编辑页面(这样它们的时间戳是相同的),并一个接一个地更新它们.

当我更新第二页时,我预计会出现DbUpdateConcurrencyException.但我没有.

我认为发生的是在第二页中,我在Edit操作中再次从DB获取purchaseOrder对象:

var purchaseOrder = db.PurchaseOrders.Find(id);
Run Code Online (Sandbox Code Playgroud)

因此,由于之前的编辑,时间戳是新的时间戳.

但我希望UpdateModel()从formcollection中替换Timestamp值.显然,事实并非如此.

我怎样才能检索到purchaseOrder中的时间戳的值设置为在隐藏字段,这样并发会被检测到?

asp.net-mvc concurrency entity-framework entity-framework-4.1

8
推荐指数
1
解决办法
5716
查看次数