ประเภท Enum ไม่ได้ถูกแมปกับตาราง DB

ฉันใช้รหัส EF 5.0 ก่อนในไลบรารี .NET 4 กำลังพยายามตั้งค่าสมาชิกของคลาสให้เป็นประเภท Enum แต่ไม่ได้รับการคงอยู่ในฐานข้อมูล และไม่มีข้อยกเว้นรันไทม์เกิดขึ้นเมื่อ EF สร้างฐานข้อมูลตามโค้ด

แน่นอน เมื่อฉันพยายามสอบถามกับ Enum นั้น:

var departments = db.Departments
                    .Where(dep => dep.Name == DepartmentNames.English);

ฉันได้รับข้อยกเว้นว่า:

The specified type member 'Name' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

ฉันใช้ตัวอย่างของการใช้ Enum ของ Microsoft: http://msdn.microsoft.com/en-us/data/hh859576.aspx

สมาชิก Enum ยังไม่รองรับใช่ไหม EF 5.0 แตกต่างกันอย่างไรเมื่อโฮสต์โดยสภาพแวดล้อม .NET 4 มากกว่าเมื่อโฮสต์โดย .NET 5


person Ofer Zelig    schedule 15.11.2012    source แหล่งที่มา


คำตอบ (1)


Enums ที่เปิดตัวครั้งแรกในคอมโพเนนต์ EF 5 ที่อยู่ใน .NET Framework 4.5 (System.Data.Entity.dll) หากคุณใช้ EF5 แต่กำหนดเป้าหมายเป็น .NET Framework 4 ไม่มีการรองรับ enums เนื่องจาก System.Data.Entity.dll ไม่รองรับซึ่งเป็นส่วนหนึ่งของ .NET Framework 4 ดังนั้น ใช่ EF5 บน .NET Framework 4 คือ ลดขอบเขตลงเมื่อเปรียบเทียบกับ EF5 บน .NET Framework 4.5 คุณสมบัติอื่นๆ บางอย่างที่พร้อมใช้งานเมื่อคุณกำหนดเป้าหมาย .NET Framework 4.5 แต่ไม่สามารถใช้ได้เมื่อคุณกำหนดเป้าหมาย .NET Framework 4 ได้แก่ ประเภทเชิงพื้นที่, ฟังก์ชัน Table Valued, ขั้นตอนแบบ strored ที่ส่งคืนชุดผลลัพธ์หลายชุด และอื่นๆ อีกสองสามอย่าง อีกทางเลือกหนึ่งคือย้ายไปที่ EF6 (รุ่นอัลฟ่าที่วางจำหน่ายเมื่อไม่กี่สัปดาห์ก่อน) ซึ่งไม่ได้ขึ้นอยู่กับ System.Data.Entity.dll และดังนั้นจึงรองรับคุณสมบัติทั้งหมดที่มาพร้อมกับ EF5 บนทั้ง .NET Framework 4.5 และ .NET Framework 4 บวกกับบางส่วน เพิ่มเติม (เช่น async บน .NET Framework 4.5) EF6 เป็นโครงการโอเพ่นซอร์สจาก Microsoft และคุณสามารถดูรายละเอียดทั้งหมดได้ที่นี่: http://entityframework.codeplex.com/

person Pawel    schedule 18.11.2012