Guid: ฉันจะรับบันทึกที่แทรกล่าสุดผ่าน LINQ ไปยัง Entites ได้อย่างไร

ฉันใช้โค้ดด้านล่างเพื่อดึงบันทึกที่แทรกล่าสุด:

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

อย่างที่คุณเห็น Id เป็นประเภท Guid:

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

}

หลังจากรันโค้ดแล้ว ฉันได้รับข้อผิดพลาดนี้:

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

ป.ล.: โค้ดด้านบนใช้งานได้หากฉันใช้ int สำหรับ Id


person Sirwan Afifi    schedule 03.01.2015    source แหล่งที่มา
comment
เมื่อถึงจุดใดที่คุณได้รับข้อผิดพลาด?   -  person Rahul    schedule 03.01.2015
comment
@Rahul Inside GetLastRequest() วิธี กลับ   -  person Sirwan Afifi    schedule 03.01.2015
comment
ไกด์มีไว้เพื่อให้มีเอกลักษณ์เท่านั้น ไม่ได้มีไว้เพื่อให้ถูกสั่ง คุณไม่สามารถทำ Max บน Guid ใน SQL Server ได้ ดังนั้น EF จึงไม่รองรับ stackoverflow.com/questions/6069368/   -  person juharr    schedule 03.01.2015
comment
ต่างจากไซต์ฟอรัมตรงที่เราไม่ใช้ Thanks หรือความช่วยเหลือใดๆ ที่ชื่นชม หรือลายเซ็นบน Stack Overflow ดู ควร 'สวัสดี', 'ขอบคุณ' แท็กไลน์และคำทักทายถูกลบออกจากโพสต์หรือไม่ BTW เป็นการขอบคุณล่วงหน้า ไม่ใช่ขอบคุณล่วงหน้า   -  person John Saunders    schedule 24.01.2015


คำตอบ (2)


คุณจะต้องประทับเวลาบันทึกหรือใส่ int ที่เพิ่มขึ้นอัตโนมัติในบันทึก - GUID จะถูกสร้างขึ้นแบบสุ่ม ดังนั้น GUID จะไม่แสดงถึง GUID "สูงสุด" หลังจากการแทรก

หากจุดประสงค์หลักของคุณคือการได้รับบันทึกหลังจากแทรก คุณสามารถสร้าง GUID ในเลเยอร์แอปพลิเคชันของคุณและแทรกลงในฐานข้อมูล ด้วยวิธีนี้คุณสามารถส่งคืน GUID ที่คุณเพิ่งแทรกเพื่อสืบค้นกลับเข้าไปในฐานข้อมูลสำหรับข้อมูลของคุณ .

person C Bauer    schedule 03.01.2015

สิ่งนี้ใช้ได้กับ int เนื่องจากเอนทิตีเฟรมเวิร์กสามารถแปลวิธี Max()-linq-method เป็นฟังก์ชัน sql ที่เหมาะสมได้ แต่มันล้มเหลวสำหรับ Guid เนื่องจากไม่รองรับ

ดูสิ่งนี้ (เลื่อนลงไปที่ MAX( expression )): http://msdn.microsoft.com/en-us/library/bb399163%28v=vs.110%29.aspx

คอลเลกชัน (T) โดยที่ T เป็นหนึ่งในประเภทต่อไปนี้: Byte, Int16, Int32, Int64, Byte, Single, Double, Decimal, DateTime, DateTimeOffset, Time, String, Binary

person khlr    schedule 03.01.2015
comment
สิ่งนี้จะอธิบายว่าทำไมรหัสของ OP ไม่ทำงาน แต่ไม่ได้ตอบคำถามว่าจะรับบันทึกล่าสุดได้อย่างไรหากใช้ Guids - person juharr; 03.01.2015
comment
แน่นอน แต่ฉันคิดว่า OP ไม่ทราบเรื่องนี้เนื่องจากเขาไม่ได้ขอวิธีแก้ไข แต่เพียงสงสัยเกี่ยวกับข้อผิดพลาด - person khlr; 03.01.2015
comment
ฉันเข้าใจว่าคุณมาจากไหน แต่ชื่อเรื่องนั้นแท้จริงแล้ว จะรับบันทึกที่แทรกล่าสุดผ่าน Linq ไปยังเอนทิตีได้อย่างไร ฉันแค่คิดว่าคำตอบของคุณจะดีกว่าถ้าคุณรวมรหัสเพื่อแทรกบันทึกล่าสุด - person juharr; 03.01.2015