我在我的專案中使用 ASP.NET Boilerplate MVC(不是 Core)模板,它使用 EF6 作為 ORM。資料庫是 SQL Server Express。
這是我的物體物件(忽略不相關的屬性):
public class Asset : AggregateRoot<long>
{
[DataType(DataType.DateTime)]
public DateTime? LastControlTime { get; set; }
}
當我創建一個新資產時,這個欄位被適當地創建為 NULL。所以,一切都按照最初的意圖進行。但是當我嘗試通過一個簡單的服務呼叫更新一個物件時,它搞砸了。
下面是應用服務類中的方法:
public void ResetLastControlTime (EntityDto<long> input)
{
var asset = Repository.Get(input.Id);
asset.LastControlTime = default(DateTime?);
}
這應該將該欄位重置為空。我也試過了asset.LastControlTime = null;。但最后它在資料庫中的那個欄位中寫入了“0001-01-01 00:00:00.0000000”。我在代碼中有很多地方可以控制空值,所以現在我不得不更改大量舊檔案,或者我必須找到某種方法將該欄位重置為簡單的 NULL。
我在這里檢查了類似的問題,但找不到答案。所有這些都講述了我已經擁有的可為空的 DateTime。在 SQL 服務器表架構中,資料型別是datetime2(7),所以我想這也是正確的。哦,洗掉 DataType 注釋也沒有改變任何東西。
那么我在這里錯過了什么?我應該檢查什么才能找到問題?
uj5u.com熱心網友回復:
我想如果所有其他方法都失敗了,您可以通過重新實作該屬性來簡化大部分代碼:
public class Asset : AggregateRoot<long>
{
public DateTime? _LastControlTime;
[DataType(DataType.DateTime)]
public DateTime? LastControlTime {
get {
return _LastControlTime;
}
set {
if (value == DateTime.MinValue) {
_LastControlTime = null;
} else {
_LastControlTime = value;
}
}
}
它并沒有真正切入問題的核心,但可以讓您進步,而無需在整個程式中更改所有 == null 和 .HasValue。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/363947.html
標籤:C# asp.net-mvc 实体框架 实体框架-6 sql-server-express
上一篇:組合存盤庫邏輯的最佳方法
