簡體   English   中英

為什么我無法使用Entity Framework保存當前的DateTime.Now

[英]why i can't save the current DateTime.Now using Entity Framework

using (var transaction = new TransactionScope())
{
     using (var db = new MyEntities())
     {    
          var newGroup = new Groups
          {
              GroupDate = DateTime.Now,
              GroupName = "someName"
          };
          db.Groups.Add(newGroup);
          db.SaveChanges();
     }
     transaction.Complete();
 }

GroupId和GroupDate是PK,GroupId是Identity(步驟= 1)而GroupDate不是

任何人都可以告訴我為什么在使用像這樣的簡單代碼時發生這種異常以及如果可能的話如何關閉樂觀並發更新

存儲更新,插入或刪除語句會影響意外的行數(0)。 自實體加載后,實體可能已被修改或刪除。 刷新ObjectStateManager條目。

它很可能是.NET DateTime類型的不同精度和您在SQL Server中使用的列類型(可能是datetime

使用SaveChanges發送到數據庫的INSERT語句如下所示:

exec sp_executesql N'insert [dbo].[Groups]([GroupDate], [GroupName])
values (@0, @1)
select [GroupId]
from [dbo].[Groups]
where @@ROWCOUNT > 0 and [GroupId] = scope_identity() and [GroupDate] = @0',
N'@0 datetime2(7),@1 nvarchar(50)',
@0='2013-09-01 14:21:44.5156250',@1=N'someName'

.NET DateTime在小數點后存儲7位數: .5156250 但是SQL datetime類型不能存儲它,因為它的精度較低,並且在存儲值后會切斷一些數字。 因此,比較[GroupDate] = @0where子句返回false和EF獲取信息后面什么也沒有存儲(雖然實際上INSERT 執行),取消交易,並拋出異常。

據我所知,您只能通過以下更改之一解決此問題:

  • 從主鍵中刪除GroupDate非鍵列
  • 或者將SQL Server中的列類型更改為datetime2(7) ,其具有與.NET DateTime類型相同的精度
  • 或者為GroupDate提供較低的精度,以便可以將值完全存儲在SQL datetime類型中而不會被截斷,例如僅使用秒精度且毫秒為0

     var now = DateTime.Now; var date = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second); var newGroup = new Groups { GroupDate = date, GroupName = "someName" }; 

    (可能有一種更聰明的方法可以從給定的DateTime值中刪除毫秒,而不是上面的代碼,但我現在找不到。)

不要關閉Optmistic Concurrency Updates ,您將隱藏問題而不是修復它。 請執行下列操作:

using (var db = new MyEntities())
{    
    using (var transaction = new TransactionScope())
    {
        var newGroup = new Groups
        {
            GroupDate = DateTime.Now,
            GroupName = "someName"
        };
        db.Groups.Add(newGroup);
        db.SaveChanges();
        transaction.Complete();
     }
}

現在不同的是你在DBContext中創建TranscationScope我希望這能解決你的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM