• 26-11-2023, 11:01:53
    #1
    Arkadaşlar merhaba,
    .Net Core da kendimi geliştirmek için proje yazıyorum.
    SQL de migration ile bir database oluşturdum.
    Tablonun birinde DateTime türünde veri var.
    Tabloya ekleme işlemi yapmak isterken aşağıda ki hatayı fırlatıyor.
    DateTime2 sorununu nasıl çözebilirim.

    "The version of SQL Server in use does not support datatype 'datetime2'." böyle bir hata alıyorum.

    Not: İçerisinde datetime olmayan model lerim de ekleme sorunu yok.
  • 26-11-2023, 12:15:09
    #2
    Veri tipi olarak datetime2 değil sadece datetime kullan.
  • 26-11-2023, 12:16:19
    #3
    SQL 'de Datetime ve Datetime2 arasındaki fark var. Datetime2 biraz daha hassas timespan tutmak için. Örnek olarak Eğer SQL de aşağıdaki queryleri yapıştırıp denerseniz farkı görürsünüz ;

    DECLARE @myDatetime datetime = '2023-11-26T12:34:56.789'; SELECT @myDatetime AS 'Datetime';
    -- datetime2 kullanımı DECLARE @myDatetime2 datetime2(3) = '2023-11-26T12:34:56.789'; SELECT @myDatetime2 AS 'Datetime2';


    Sizin durumunuz için Code First yapı kullanıyorsunuz muhtemelen. Veri tipinizi .netcore tarafında yani entity'nizi Datetime olarak ayarlayın sql de migration attığığınızda datetime2 olmadığından emin olun.
    eğer öyle olduğunu görürseniz veritipini sql'e gidip datetime formatına çekin sorununuz düzelecektir.
  • 26-11-2023, 12:24:23
    #4
    redgen01 adlı üyeden alıntı: mesajı görüntüle
    SQL 'de Datetime ve Datetime2 arasındaki fark var. Datetime2 biraz daha hassas timespan tutmak için. Örnek olarak Eğer SQL de aşağıdaki queryleri yapıştırıp denerseniz farkı görürsünüz ;

    DECLARE @myDatetime datetime = '2023-11-26T12:34:56.789'; SELECT @myDatetime AS 'Datetime';
    -- datetime2 kullanımı DECLARE @myDatetime2 datetime2(3) = '2023-11-26T12:34:56.789'; SELECT @myDatetime2 AS 'Datetime2';


    Sizin durumunuz için Code First yapı kullanıyorsunuz muhtemelen. Veri tipinizi .netcore tarafında yani entity'nizi Datetime olarak ayarlayın sql de migration attığığınızda datetime2 olmadığından emin olun.
    eğer öyle olduğunu görürseniz veritipini sql'e gidip datetime formatına çekin sorununuz düzelecektir.
    Aslında tam da bunu denedim. Evet code first yapı kullanıyorum. Class da DateTime eklememe rağmen migration da DateTime2 olarak geliyor. Manuel olarak migration ı datetime olarak düzenledim.
    SQL de de aslında datetime görünüyor. Neye göre DateTime2 yi baz alıyor anlamadım.
  • 26-11-2023, 12:24:52
    #5
    Hayrettin adlı üyeden alıntı: mesajı görüntüle
    Bence datetime verilerini varchar (string) olarak saklayın.
    Datetime tipinde ben veritabanında kullanmadım hiç
    Filtrelemeler de, raporlar da sorun yaşarmıyım
  • 26-11-2023, 12:29:22
    #6
    Property ine lu attribute u ekleyip tüm migration ları ve db yi silip tekrar oluşturmayı dener misin?

    [Column(TypeName = "datetime")]
  • 26-11-2023, 12:30:24
    #7
    altun92 adlı üyeden alıntı: mesajı görüntüle
    Filtrelemeler de, raporlar da sorun yaşarmıyım
    Evet yaşarsın. Tarih verisini spesifik durumlar harici string olarak saklamak saçmalıktır.
  • 26-11-2023, 12:34:50
    #8
    altun92 adlı üyeden alıntı: mesajı görüntüle
    Aslında tam da bunu denedim. Evet code first yapı kullanıyorum. Class da DateTime eklememe rağmen migration da DateTime2 olarak geliyor. Manuel olarak migration ı datetime olarak düzenledim.
    SQL de de aslında datetime görünüyor. Neye göre DateTime2 yi baz alıyor anlamadım.

    Evet Kütüphane olarak Microsoft.EntityFrameworkCore.SqlServer kullandığından emin ol. Entity'nin üstüne de tipi belirlemek içinde propertyy'nin üstüne gidip şunu kullan;
    [Column(TypeName = "datetime")]
  • 26-11-2023, 12:36:02
    #9
    Bunları bir deniyeyim. Çok teşekkür ederim destekleriniz için.