Panduan: Bagaimana saya bisa mendapatkan catatan terbaru yang dimasukkan melalui LINQ ke Entites?

Saya menggunakan kode di bawah ini untuk mengambil catatan terbaru yang dimasukkan:

public Request GetLastRequest()
{
    return _request.Find(_request.Max(p => p.Id));
}

Seperti yang Anda lihat Id adalah tipe Guid:

public class Request
{
        public Request()
        {
            Id = Guid.NewGuid();
        }
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }

}

Setelah menjalankan kode saya, saya mendapatkan kesalahan ini:

An exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dll but was not handled in user code

PS: kode di atas berfungsi jika saya menggunakan int untuk Id.


person Sirwan Afifi    schedule 03.01.2015    source sumber
comment
Pada titik manakah Anda mendapatkan Kesalahan?   -  person Rahul    schedule 03.01.2015
comment
@Rahul Di dalam metode GetLastRequest(). kembali   -  person Sirwan Afifi    schedule 03.01.2015
comment
Panduan hanya dimaksudkan untuk menjadi unik, tidak dimaksudkan untuk dipesan. Anda tidak dapat melakukan Max pada Guid di SQL Server, sehingga tidak didukung oleh EF. stackoverflow.com/questions/6069368/   -  person juharr    schedule 03.01.2015
comment
Tidak seperti situs forum, kami tidak menggunakan Terima Kasih, atau Bantuan apa pun yang kami hargai, atau tanda tangan di Stack Overflow. Lihat Haruskah 'Hai', 'terima kasih,' tagline, dan salam dihapus dari postingan?. BTW, ini Terima kasih sebelumnya, bukan Terima kasih sebelumnya.   -  person John Saunders    schedule 24.01.2015


Jawaban (2)


Anda harus memberi stempel waktu pada rekaman atau memasukkan int yang bertambah secara otomatis pada rekaman - GUID dihasilkan secara acak, sehingga GUID tersebut tidak akan benar-benar mewakili GUID "maks" setelah penyisipan.

Jika tujuan utama Anda adalah untuk mendapatkan catatan setelah memasukkannya, Anda dapat membuat GUID di lapisan aplikasi Anda dan memasukkannya ke dalam database, dengan cara ini Anda dapat mengembalikan GUID yang baru saja Anda masukkan untuk melakukan kueri kembali ke database untuk informasi Anda .

person C Bauer    schedule 03.01.2015

Ini berfungsi dengan int karena kerangka entitas dapat menerjemahkan metode Max()-linq ke fungsi sql yang sesuai. Namun gagal untuk Guid karena tidak didukung.

Lihatlah ini (gulir ke bawah ke MAX( ekspresi )): http://msdn.microsoft.com/en-us/library/bb399163%28v=vs.110%29.aspx

Koleksi (T) dengan T adalah salah satu tipe berikut: Byte, Int16, Int32, Int64, Byte, Single, Double, Decimal, DateTime, DateTimeOffset, Time, String, Binary.

person khlr    schedule 03.01.2015
comment
Ini menjelaskan mengapa kode OP tidak berfungsi, tetapi tidak menjawab pertanyaan tentang bagaimana mendapatkan catatan terbaru jika Panduan digunakan. - person juharr; 03.01.2015
comment
Tentu, tapi menurut saya OP tidak menyadari hal ini karena dia tidak meminta solusi tetapi hanya bertanya-tanya tentang kesalahannya. - person khlr; 03.01.2015
comment
Saya mengerti dari mana Anda berasal, tetapi judulnya secara harfiah adalah Bagaimana cara memasukkan catatan terbaru melalui Linq ke Entitas?. Saya hanya berpikir jawaban Anda akan lebih baik jika Anda memasukkan kode untuk memasukkan catatan terakhir. - person juharr; 03.01.2015