Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kerangka Entitas - nilai default tidak diatur dalam tabel server sql

Ini adalah salah satu dari sedikit masalah yang bermasalah dengan Entity Framework. Katakanlah Anda memiliki kelas yang terlihat seperti ini:

public class MyEntity
{
    // Id is a PK on the table with Auto-Increment
    public int Id { get; set; }

    // CreatedOn is a datetime, with a default value
    public DateTime CreatedOn { get; set; }
}

Sekarang, Anda ingin memasukkan elemen baru:

using(var context = new YourContext()) 
{
    context.MyEntities.Add(new MyEntity())
}

Entity Framework mengetahui cara menangani kunci utama peningkatan otomatis karena definisi dalam EDMX. Itu tidak akan mencoba memasukkan nilai untuk Id Properti. Namun, sejauh menyangkut Entity Framework, CreatedOn memiliki nilai:DateTime default . Karena Entity Framework tidak dapat mengatakan "baik, ia memiliki nilai tetapi saya harus mengabaikannya", itu akan secara aktif memasukkan catatan dengan CreatedOn nilai properti, melewati nilai default pada definisi kolom di tabel Anda.

Tidak ada cara mudah untuk melakukan ini. Anda dapat secara aktif mengatur CreatedOn properti ke DateTime.Now saat Anda memasukkan item itu. Atau Anda dapat membuat antarmuka dan pasangan metode ekstensi:

public interface ICreatedOn
{
    public DateTime CreatedOn { get; set; }
}

public partial class MyEntity : ICreatedOn
{

}

public static TEntity AsNew<TEntity>(this TEntity entity) where TEntity : ICreatedOn
{
    if(entity != null)
        entity.CreatedOn = DateTime.Now;

    return entity;
}

using(var context = new YourContext()) 
{
    context.MyEntities.Add(new MyEntity().AsNew())
}   

Sunting: Untuk memperluas poin ini, alasan mengapa ini menjadi masalah yang tidak dapat diselesaikan adalah karena makna di balik autoincrement bidang dan bidang dengan default kendala nilai. Bidang peningkatan otomatis harus, menurut definisi, selalu ditangani oleh server, menggunakan seed dan semua jazz itu. Anda tidak dapat menentukan nilai untuk bidang kenaikan otomatis pada sisipan kecuali Anda telah menggunakan SET IDENTITY INSERT ON . Namun, nilai default hanyalah petunjuk yang mengatakan "jika saya tidak menentukan nilai apa pun, gunakan ini". Karena tipe nilai dalam .NET tidak boleh nol, akan selalu ada nilai dan Kerangka Entitas tidak dapat menyimpulkan bahwa default nilai untuk bidang itu, pada saat itu, berarti Anda ingin itu menjadi default di server SQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dapatkan Beberapa Nilai di Kursor SQL Server

  2. SSRS:Cara membuat laporan SEPERTI tabel pivot di ssrs 2008 r2

  3. Di mana nilai dalam kolom yang berisi nilai yang dibatasi koma

  4. Gabungkan interval tanggal yang tumpang tindih

  5. SQL PILIH HH:MM - HH:MM