سؤال

لدينا الجدول الذي يبدو تقريبا مثل هذا:

CREATE TABLE Lockers 
{
  UserID int NOT NULL PRIMARY KEY (foreign key),
  LockerStyleID int (foreign key),
  NameplateID int (foreign key)
}

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

Locker l = new Locker { 
  UserID = userID, 
  LockerStyleID = lockerStyleID, 
  NameplateID = nameplateID 
};
entities.AddLocker(l);

يمكننا أن نفعل ذلك في LINQ إلى SQL, ولكن ليس EF ؟

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

المحلول

هذه ميزة مفقودة يبدو أن تزعج الكثير من الناس.

  • أخبار جيدة:MS سوف تعالج هذه المسألة مع .NET 4.0.
  • الأخبار السيئة:الآن, أو إذا كنت عالقا على 3.5 عليك القيام به قليلا من العمل ، ولكن من الممكن.

عليك أن تفعل ذلك من هذا القبيل:

Locker locker = new Locker();
locker.UserReference.EntityKey = new System.Data.EntityKey("entities.User", "ID", userID);
locker.LockerStyleReference.EntityKey = new EntityKey("entities.LockerStyle", "ID", lockerStyleID);
locker.NameplateReference.EntityKey = new EntityKey("entities.Nameplate", "ID", nameplateID);
entities.AddLocker(locker);
entities.SaveChanges();

نصائح أخرى

وماذا كنت تفعل لجعل الامور سهلة وإضافة خاصية المفاتيح الخارجية نفسي في فئة جزئية:

public int UserID
{
   get
   {
      if (this.User != null)
         return this.User.UserID;
   }
   set 
   {
      this.UserReference.EntityKey = new System.Data.EntityKey("entities.User", "ID", value);
   }
}

هل يمكن أن تجعل طريقة التمديد الذي يبني الكيان على أساس هذه معرف.

وباستخدام EntityKey يحل مشكلتك.)

وALK.

وطريقة أخرى إذا كنت لا تمانع في 'الملوثة' لكم ديسيبل المخطط هو لإضافة عمود محسوب، على سبيل المثال إذا كان لديك حقل المفتاح الخارجي FK_Customer هل يمكن تحديد عمود محسوب جديد FK_Customer_Computed التي لديها FK_Customer التعبير. عند إنشاء \ تحديث نموذج EDMX ستظهر مجال مثل مجال العادية التي يمكنك ثم الرجوع منك الكائن الكيان.

وأو الانتظار لEF4:)

وبعد يوم من الإجابة ديلان، وقد كتب اليكس جيمس بلوق على وجه التحديد هذه، شرح المشكلة بالكامل وكيفية التوجه نحو الطبقة + الملكية حلا جزئيا.

<وأ href = "http://blogs.msdn.com/b/alexj/archive/2009/03/25/tip-7-faking-foreign-key-properties-in-net-3-5- sp1.aspx "يختلط =" نوفولو "> تزييف مفاتيح الخارجية - EF3.5

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