Kullanıyorum ASP.NET Projemde ef6'yı ORM olarak kullanan MVC (Çekirdek değil) şablonunu kaynatın. Veritabanı SQL Server Express'tir.
İşte varlık nesnem (ilişkili olmayan özellikleri göz ardı ederek):
public class Asset : AggregateRoot<long>
{
[DataType(DataType.DateTime)]
public DateTime? LastControlTime { get; set; }
}
Yeni bir Varlık oluşturduğumda, bu alan uygun şekilde NULL olarak oluşturulur. Yani, her şey ilk başta amaçlandığı gibi çalışır. Ancak bir nesneyi basit bir servis çağrısı ile güncellemeye çalıştığımda, berbat olur.
İşte uygulama hizmeti sınıfındaki yöntem:
public void ResetLastControlTime (EntityDto<long> input)
{
var asset = Repository.Get(input.Id);
asset.LastControlTime = default(DateTime?);
}
Bu, bu alanı null olarak sıfırlamalıdır. Ayrıca denedim asset.LastControlTime = null;
. Ama sonunda veritabanındaki o alana "0001-01-01 00: 00: 00.0000000" yazıyor. Kodda boş bir değer için kontrol ettiğim birçok yer var, bu yüzden şimdi tonlarca eski dosyayı değiştirmek zorunda kaldım ya da bu alanı basitçe BOŞ olarak sıfırlamanın bir yolunu bulmalıyım.
Burada benzer soruları kontrol ettim ancak bir cevap bulamıyorum. Hepsi zaten sahip olduğum nullable Datetime'ı anlatıyor. SQL server tablo şemasında, Veri Türü datetime2(7)
sanırım bu da doğru. Oh ve veri türü ek açıklamasını silmek de hiçbir şeyi değiştirmedi.
Peki burada neyi kaçırıyorum? Sorunu bulmak için neyi kontrol etmeliyim?