الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

l'héritage sur EDM , Inheritance in Entity Data Model

بدأه shipia في 22 فبراير 2012 · 8 رد · 1,324 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

شرح كيفية التعامل مع : "l'héritage sur " EDM

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 23 فبراير 2012 في 18:48 — السبب: إضافة ترجمة العنوان للإنكليزية

#2

السلام عليكم ...

يرجى توضيح المصطلح بالانكليزية , فنتيجة ترجمته كانت inheritance on EDM , هل تقصد الوراثة , ما هي EDM ؟؟...

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 22 فبراير 2012 في 18:11

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3

نعم الوراثة .

EDM : Entity data model

#4

السلام عليكم ...

  1. فكرة الوراثة هي إمكانية إنشاء كينونات أو صفوف جديدة (الأبناء أو child أو derived) من كينونات أو صفوف موجودة (الأباء أو base أو super ), بحث ان الكينونات الجديدة (الأبناء) تحوي نفس الــ attributes الموجودة في الكينونات الآباء , مع إمكانية إضافة Attributes جديدة .
  2. إذا الــ Attributes المشتركة بين الكبنونات يتم تجميعها في الأب و باقي الأبناء يقومون بالوراثة من هذا الأب و يضيفون الــ Attributes الخاصة بهم ..
  3. لنأخذ مثال , و لنفرض أننا نريد تخزين بيانات عن الطلاب في قاعدة البيانات , فنريد تخزين بيانات عن الطلاب في مرحلة البكالوريوس (StudentInBachlor) والطلاب في مرحلة الماجستير (StudentInMaster) .
  4. طبعا يمكن إنشاء جدول لكل نوع من الطلاب (جدول للبكالوريوس و جدول للماجستير) .. و لكن سيكون هناك صعوبة في التعامل مع الطلاب ككل , حيث ان الجدولين سيكون فيهما نفس الحقول تقريبا باستثاء حقول بسيطة ... و نريد ان يكون التعامل (أحيانا) في البرنامج مع الطالب مهما كان نوعه .
  5. إذا حسب المبدأ الوارد في البند رقم 2 نقوم بإنشاء كينونة Student تحوي الــ Attributes المشتركة بين جمع الطلاب و إنشاء StudentInBachlor يرث من Student و فيه الــ Attributes الإضافية و StudentInMaster يرث من student إضافة للــ Attributes الإضافية .
  6. ننشئ في قاعدة البيانات جدول للطلاب بشكل عام , و جدول للطلاب الماجستير و يرتبط معه بـ one-to-one و جدول لطلاب البكالوريوس و يرتبط مع الطلاب بــ one-to-one ... كما في الشكل : post-94677-045339200 1330007963_thumb.pn
  7. نأخذ مشروع جديد في الفيجوال و نأخذ قاعدة بيانات جديدة , ونقوم بإنشاء الجداول ..
  8. إضافة الموديل : نأخذ جديد ثم Entity Data Model ثم نحدد الجداول الثلاثة .
  9. افتراضيا يقوم الفيجوال استديو بوضع العلاقة بين الــ Entities حسب العلاقات في قاعدة البيانات .
  10. نحذف العلاقات التي وضعها الفيجوال و نجدد الكينونه StudentInMaster ثم من نافذة الخصائص , نحدد لها الــ base Type بأنه Student .
  11. نحدد الكينونة StudentInBachlor ثم من نافذة الخصائص نحدد لها الــ base type بأنه Student .
  12. نحذف الــ Attribute المسمى ID من كل من StudentInMaser و StudentInBachlor لأنها موجودة في الــ Student و هي ترث منها .. بالشكل : post-94677-059351000 1330008173_thumb.pn
  13. لإضافة StudentInBachlor إلى قاعدة البيانات استخدم الكود :
    private void button1_Click(object sender, EventArgs e)
        	{
            	DatabaseEntities db = new DatabaseEntities();
            	StudentInBachlor studentInBachlor = new StudentInBachlor()
            	{
                	StudentName = "s1",
                	Phone = "12345",
                	CurrentYear = "4"
            	};
    
            	db.Student.AddObject(studentInBachlor);
            	db.SaveChanges();
        	}

    لاحظ كيف تمت إضافة studentInBachlor إلى db.Student و ذلك ممكن حسب الوراثة .. (StudentInBachlor Is A Student) .

  14. لجلب الــ StudentInBachlor نستخدم الكود التالي :
        DatabaseEntities db = new DatabaseEntities();
            	StudentInBachlor studentInBachlor = db.Student.OfType<StudentInBachlor>().SingleOrDefault(p => p.CurrentYear == "4");
            	if (studentInBachlor != null)
            	{
                	studentInBachlor.CurrentYear = "5";
                	db.SaveChanges();
            	}

  15. المشروع في المرفقات ..

ArabTeamInheritanceEDM.rar

المرفقات
StudentDB.pngStudentEDModel.png

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 23 فبراير 2012 في 18:55

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#5

Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii :)

#6

.

تم تعديل هذه المشاركة بواسطة shipia في 24 فبراير 2012 في 00:32

#7

جزاك الله خيرا اخي , دون ان ازعجك هل ممكن ان تشرح لي كيف لي ان اتعامل مع Many to Many

#8

السلام عليكم ... بارك الله بك أخي ..

بالنسبة للــ Many-to-Many فهو سهل و بسيط ...

  1. لتكن لدينا القاعدة , تحوى علاقة (متعدد-إلى-متعدد), كما في الشكل : post-94677-035780000 1330089267_thumb.pn
  2. قم بإضافة الجداول إلى الــ Entity Data Model .
  3. الفيجوال استديو , سيعرف أن هذه العلاقة هي Many-to-Many و يظهر الموديل تلقائيا كما في الشكل : post-94677-068939000 1330089280_thumb.pn
  4. كود الحفظ يكون بالشكل التالي :
    private void button1_Click(object sender, EventArgs e)
        	{
            	DatabaseEntities db = new DatabaseEntities();
            	Users user = new Users() { UserName = "U1" };
            	user.Roles.Add(new Roles() { RoleName = "SuperUser" });
            	user.Roles.Add(new Roles() { RoleName = "BackupUser" });
            	db.Users.AddObject(user);
            	db.SaveChanges();
    
        	}

    حيث قمنا بإنشاء user ثم أضفنا له مجموعة من الــ Roles ثم حفظناها ..

  5. أو ممكن يكون بالشكل التالي :
    private void button3_Click(object sender, EventArgs e)
        	{
            	DatabaseEntities db = new DatabaseEntities();
            	Roles  role = new Roles() { RoleName = "R1" };
            	role.Users.Add(new Users () { UserName = "U2" });
            	role.Users.Add(new Users() { UserName = "U3" });
            	db.Roles.AddObject(role);
            	db.SaveChanges();
    
        	}

    أي أولا نقوم بإنشاء الــ Role ثم نضيف لها الــ Users .

  6. أما لحذف Role من User فهو :
     private void button2_Click(object sender, EventArgs e)
        	{
            	DatabaseEntities db = new DatabaseEntities();
            	Users user = db.Users.SingleOrDefault(u => u.UserName == "U1");
            	Roles role = db.Roles.SingleOrDefault(r => r.RoleName == "SuperUser");
            	user.Roles.Remove(role);
            	db.SaveChanges();
    
        	}

  7. و كذلك يمكن حذف User من Role .....
  8. فكرة الكود أن الــ user لديه Collection من الــ Roles و كذلك الــ Role لديها Collection من الــ Users ,و أي حذف أو إضافة في هذه الــ Collections سيوف ينعكس على قاعدة البيانات ..
  9. الكود في المرفقات .

ArabTeamManyToManyEDM.rar

المرفقات
UsersDB.pngUsersEDM.png

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 24 فبراير 2012 في 16:18

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#9

جزاك الله خيرا

مواضيع مشابهة