سؤال

السؤال 1: ألعب مع EF4 ولدي فصل نموذج مثل:

public class Candidate {

public int Id {get;set;}
public string FullName {get;set;}
public Gender Sex {get;set;}
public EducationLevel HighestDegreeType {get;set;}
}

هنا بين الجنسين والتعليم هي التعدادات مثل:

public enum Gender {Male,Female,Undisclosed}
public enum EducationLevel {HighSchool,Bachelors,Masters,Doctorate}

كيف أحصل على فئة المرشحين والجنس والتعليم العمل مع EF4 إذا:

  • أقوم بتطوير النموذج الأول
  • أقوم بتطوير DB الأول

تحرير: تم نقل السؤال المتعلق بسياق الكائن لسؤال آخر هنا.

هل كانت مفيدة؟

المحلول

فيما يبدو int <-> enum لن يتم دعمه في الإصدار الأولي لـ EF4. أنا أتفق مع أولئك الذين يقولون هذا تمتص.

أنا أستخدم خاصية تقوم بعمل الصب بالنسبة لي

public partial class MyEntity
{
  public MyEnum HurrEnum {get{return (MyEnum)Hurr;} set{Hurr = (int)value;}}
}

لا يبدو الأمر سيئًا للغاية إذا قمت بتسمية الأشياء "بشكل صحيح" (وهذا يعني ، لذلك لا يبدو غبيًا). على سبيل المثال ، لديّ reasoncode enum يتم تخزينه كسبب في قاعدة البيانات ، لذلك لديّ سبب وسبب QuiceCode من الخاصية. يعمل بشكل جيد بما فيه الكفاية ، في الوقت الحالي.


أولاً ، لقد بدأت للتو في استخدام EF4 ، لذا فأنا لست حميميًا في كيفية عمله. أفترض أنها تشبه L2s ولكن مع دعم كيان أفضل. أغتنم هذه مع حبة الملح.

لتوضيح ذلك ، هذه الخاصية مخصصة للراحة ، وأنا متأكد من أن EF ستتفاعل بشكل سيء إذا حاولت الاستعلام عن قاعدة البيانات باستخدام هذه الخاصية. لا يعرف EF عن الممتلكات الخاصة بك ولا يمكنه استخدامه لبناء SQL. إذا هذا:

var foo = from x in Db.Foos where x.HurrEnum == Hurr.Durr select x;

من المحتمل أن تفشل في التصرف كما هو متوقع حيث:

var foo = Db.Foos.Where(x=> x.HurrEnum == Hurr.Durr);

من المحتمل أن يؤدي إلى جلب طاولة FOOS بأكملها في الذاكرة ثم يتم تحليلها. هذه الخاصية مخصصة للراحة ويجب استخدامها فقط بعد ضرب قاعدة البيانات! مثل:

 // this is executed in the sql server
 var foo = Db.Foos.Where(x=> x.Hurr == 1 || x.Hurr == 2).ToArray();
 // this is then done in memory
 var hurrFoos = foo.Where(x=> x.HurrEnum == Hurr.Durr);

إذا كنت لا تفهم الفرق هنا ، فأنت تلعب بالنار. تحتاج إلى معرفة كيفية قيام EF/L2S بتفسير الكود وتحويله إلى عبارات SQL.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top