يحتوي EntityReference على قيمة خاصية entitykey التي لا تتطابق؟

StackOverflow https://stackoverflow.com/questions/1368891

سؤال

أحاول إضافة بعض الكيانات التي قمت بإنشائها. عندما أحاول إضافة الكيان المعني إلى المجموعة (انظر الرمز أدناه) أحصل على الخطأ التالي:

"لا يمكن إضافة الكائن أو إرفاقه لأن كيانه يحتوي على قيمة خاصية entityKey التي لا تتطابق مع EntityKey لهذا الكائن."

لا أستطيع أن أقول ما هو entitykey الذي يشير إليه. فيما يلي الرمز ، ربما تكون هناك طريقة أفضل بكثير لسحب هذا أيضًا:

public Internship CreateInternship(Internship internshipToCreate)
{
    try
    {
        Contact contactToCreate = new Contact();

        contactToCreate.Fax = internshipToCreate.contacts.Fax;
        contactToCreate.Extension = internshipToCreate.contacts.Extension;
        contactToCreate.FirstName = internshipToCreate.contacts.FirstName;
        contactToCreate.MiddleName = internshipToCreate.contacts.MiddleName;
        contactToCreate.LastName = internshipToCreate.contacts.LastName;
        contactToCreate.PhoneNumber = internshipToCreate.contacts.PhoneNumber;
        contactToCreate.StreetAddress = internshipToCreate.contacts.StreetAddress;
        contactToCreate.PostalCode = internshipToCreate.contacts.PostalCode;
        contactToCreate.ContactEmail = internshipToCreate.contacts.ContactEmail;

        contactToCreate.statesReference.EntityKey =
                    new EntityKey("InternshipEntities.StateSet", "ID", internshipToCreate.contacts.states.ID);
        contactToCreate.countriesReference.EntityKey =
                    new EntityKey("InternshipEntities.CountrySet", "ID", internshipToCreate.contacts.countries.ID);

        _internshipEntities.AddToContactSet(contactToCreate);
        _internshipEntities.SaveChanges();

        try
        {
            Availability availabilityToCreate = new Availability();

            availabilityToCreate.StartDate = internshipToCreate.availability.StartDate;
            availabilityToCreate.EndDate = internshipToCreate.availability.EndDate;
            availabilityToCreate.Negotiable = internshipToCreate.availability.Negotiable;

            _internshipEntities.AddToAvailabilitySet(availabilityToCreate);
            _internshipEntities.SaveChanges();

            try
            {
                internshipToCreate.contactsReference.EntityKey =
                    new EntityKey("InternshipEntities.ContactSet", "ID", contactToCreate.ID);
                internshipToCreate.availabilityReference.EntityKey =
                    new EntityKey("InternshipEntities.AvailabilitySet", "ID", availabilityToCreate.ID);
                internshipToCreate.classificationsReference.EntityKey =
                    new EntityKey("InternshipEntities.ClassificationSet", "ID", internshipToCreate.classifications.ID);
                internshipToCreate.educationReference.EntityKey =
                    new EntityKey("InternshipEntities.EducationSet", "ID", internshipToCreate.education.ID);

                _internshipEntities.AddToInternshipSet(internshipToCreate); //exception here
                _internshipEntities.SaveChanges();

                return internshipToCreate;
            }
            catch(Exception e)
            {
                throw e; 
            }
        }
        catch(Exception e)
        {
            throw e;
        }
    }
    catch(Exception e)
    {
        throw e;
    }

}

لا توجد معلومات أخرى مقدمة إلى جانب الخطأ عندما أتتبع ، لذا لست متأكدًا من المفتاح الذي يمثل المشكلة.

تحرير: هنا هو الإصدار الذي انتهى به الأمر:

using (TransactionScope scope = new TransactionScope())
{
    try
    {
        Contact contactToCreate = new Contact();
        Availability availabilityToCreate = new Availability();
        Internship i = new Internship();

        // Set the contact entity values;

        contactToCreate.Fax = internshipToCreate.contacts.Fax;
        //...
        //ommited for brevity
        //...
        contactToCreate.ContactEmail = internshipToCreate.contacts.ContactEmail;

        // Set the contact entity references to existing tables

        contactToCreate.statesReference.EntityKey =
                    new EntityKey("InternshipEntities.StateSet", "ID", internshipToCreate.contacts.states.ID);
        contactToCreate.countriesReference.EntityKey =
                    new EntityKey("InternshipEntities.CountrySet", "ID", internshipToCreate.contacts.countries.ID);

        // Add contact

        _internshipEntities.AddToContactSet(contactToCreate);

        // Set the availability entity values;

        availabilityToCreate.StartDate = internshipToCreate.availability.StartDate;
        availabilityToCreate.EndDate = internshipToCreate.availability.EndDate;
        availabilityToCreate.Negotiable = internshipToCreate.availability.Negotiable;

        // Add availability

        _internshipEntities.AddToAvailabilitySet(availabilityToCreate);

        //Add contact and availability entities to new internship entity

        i.contacts = contactToCreate;
        i.availability = availabilityToCreate;

        // Set internship entity values;

        i.UserID = internshipToCreate.UserID;
        //...
        //ommited for brevity
        //...
        i.Created = DateTime.Now;

        // Set the internship entity references to existing tables

        i.classificationsReference.EntityKey =
            new EntityKey("InternshipEntities.ClassificationSet", "ID", internshipToCreate.classifications.ID);
        i.educationReference.EntityKey =
            new EntityKey("InternshipEntities.EducationSet", "ID", internshipToCreate.education.ID);

        // Add internship and save

        _internshipEntities.AddToInternshipSet(i);
        _internshipEntities.SaveChanges();

        //commit transaction
        scope.Complete();

        return internshipToCreate;

    }
    catch (Exception e)
    {
        throw e;
    }
}
هل كانت مفيدة؟

المحلول

هذا الرمز لا معنى لي كثيرًا. في حالتين ، تمر عبر entitykey عندما يمكنك فقط تعيين مرجع كائن. أي تغيير هذا:

internshipToCreate.contactsReference.EntityKey =
    new EntityKey("InternshipEntities.ContactSet", "ID", contactToCreate.ID);
internshipToCreate.availabilityReference.EntityKey =
    new EntityKey("InternshipEntities.AvailabilitySet", "ID", availabilityToCreate.ID);

...ل:

internshipToCreate.contacts = contactToCreate;
internshipToCreate.availability = availabilityToCreate;

في الحالتين الأخريين ، يبدو أنك تحاول تعيين معرف الكائن الموجود بالفعل. هذان السطران ، حتى لو كان نجاحًا ، يبدو لي ، لن يفعل شيئًا:

internshipToCreate.classificationsReference.EntityKey =
    new EntityKey("InternshipEntities.ClassificationSet", "ID", internshipToCreate.classifications.ID);
internshipToCreate.educationReference.EntityKey =
    new EntityKey("InternshipEntities.EducationSet", "ID", internshipToCreate.education.ID);

لذلك يمكنك فقط التخلص منها.

ماذا يحدث عند إجراء هذين التغييرات؟

نصائح أخرى

مرحبا،

على الرغم من أنني لست متأكدًا من المشكلة هي أن لدي اقتراح. يتم استخدام كائن التدريب الداخلي الذي تنقله إلى الطريقة (internshiptocreate) لنقل القيم إلى كيانات أخرى (اتصال ، توافر) أنك قمت بتشكيلها داخل الطريقة, ، وخلقهم يعمل بشكل جيد.

ربما يجب أن تحاول أن تفعل الشيء نفسه مع التدريب الداخلي؟ قم بإنشاء كائن التدريب الداخلي الجديد وقم بتعيين جميع القيم التي لديك من خلال أخذها من كائن internshiptocreate ، ومن تمرير الكائن الذي تم إنشاؤه حديثًا إلى طريقة _internshipentities.addtointernshipset.

من الممكن أن تكون قد وضعت بعض القيم على كائن internshiptocreate الذي تحتاجه لأغراض أخرى ، وأن بعضها يسبب بالفعل الاستثناء.

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

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