2016-03-24 22 views
0

Hareket halindeyken bir ASP.NET Core projem var ve EF7'yi ekledim.EF7 DateTime "Belirtilen satır geçerli değil"

Modelim için bir DateTime alanı eklediğimde ve veritabanına taşıdığım durumlar dışında, hepsi Amazon RDS üzerinde SQL Server kullanarak çalışıyor.

Daha sonra projemi yeniden başlattığımda ve bir varlık (DBContext ve Linq aracılığıyla) almaya çalıştığımda her seferinde gerçekten çok kötü bir istisna mesajı alıyorum. Hoşlanmadığı DateTime değerleri hakkında ne olabilir?

Model sınıfı:

public class Advertiser 
{ 
    // ... Standard constructors go here 

    [Key] 
    public string Key { get; set; } 
    public string Name { get; set; } 
    public bool IsActive { get; set; } 
    public string Email { get; set; } 
    public DateTime TargetDate { get; set; } 
    public string Comments { get; set; } 
} 

Bağlam: Depo sınıfındaki kodun

public class AdvertiserContext : DbContext 
{ 
    public DbSet<Advertiser> Advertisers { get; set; } 
} 

Hat duruma neden olur:

public Advertiser Find(string key) 
{ 
    return Context.Advertisers.Single(x => x.Key == key); 
} 

İki "istiflenmiş" özel durumlar ortaya, birinci:

Microsoft.Data.Entity.Query.Internal.QueryCompiler[1] 
An exception occurred in the database while iterating the results of a query. 
System.InvalidCastException: Specified cast is not valid. 
at (wrapper dynamic-method) System.Object:lambda_method (System.Runtime.CompilerServices.Closure,Microsoft.Data.Entity.Storage.ValueBuffer) 

İkinci: SQL

Microsoft.AspNet.Server.Kestrel[13] 
An unhandled exception was thrown by the application. 
System.InvalidCastException: Specified cast is not valid. 
at (wrapper dynamic-method) System.Object:lambda_method (System.Runtime.CompilerServices.Closure,Microsoft.Data.Entity.Storage.ValueBuffer 
+0

alakalı modeller/kod lütfen Dahil –

+0

yeni tarih alanı eklemeden önce mevcut veriler var mı? Belki de bu satırların tarih için boş değerleri vardır, eğer öyleyse eğer boş satırları –

+0

doldurmayı deneyin Çok iyi tahmin, ancak örnek verileri kullanarak ve tablodaki veritabanını testler arasında bırakarak test ettim. Yeni sütunların eklenmesiyle ilgili görünmüyordu ve başlangıçta hiç boş değer olmadı. – robbpriestley

cevap

0

DateTime 1753/01/01 12:00:00 AM bir dakika değerine sahiptir. TargetProperty'niz boş bırakılamayacağından, varlığınızın "0001/01/01 12:00:00 AM" ile başlatıldığını varsayalım. Bu, clr'deki DateTime için minimum değerdir ve aralık dışıdır, dolayısıyla elde ettiğiniz istisna .

Sorununuzu çözmek için iki seçeneğiniz var, bir tanesi geçiş yöntemini veya eşleştirmeyi değiştirmek ve sütun veri türünü DateTime2'ye ayarlamak olacak. Diğer bir yol ise TargetDate'i null olarak bildirmektir. Parçacıkların takibi.

modelBuilder.Entity<Advertiser>(entity => 
{  
    entity.Property(a => a.TargetDate) 
       .ForSqlServerHasColumnType("DateTime2"); 
}); 

veya

public DateTime? TargetDate { get; set; } 
+0

Bir şey üzerindeymişsiniz gibi hissediyorum çünkü kod (ve veriler) ilk koşuyu iyi çalışıyor. Sonra sunucuyu durdurup yeniden başlattığımda, istisnanın başlaması, sorunun kodun yeniden başlatılmasından kaynaklandığını gösteriyor. Ekleniyor? DateTime türüne "işleci", veritabanında geçersiz bir alana neden olur ve aslında, otomatik olarak ilgili veri türü, aradığınız etkiyi inanıyorum DateTime2'dir. Ne yazık ki, bu sonuç değiştirmez (aynı istisnalar oluşur). – robbpriestley

+0

OSX veya Linux üzerinde mi çalışıyorsunuz? –

+0

OSX – robbpriestley

İlgili konular