質問

私は、私が作成したいくつかのエンティティを追加しようとしています。私が試してみて、セットに問題のエンティティを追加すると、私は次のエラーを取得する(以下のコードを参照してください):

「は、その実体参照は、このオブジェクトのための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;
    }
}
役に立ちましたか?

解決

このコードは私に多くの意味を作っていません。あなただけのオブジェクト参照を割り当てることができたときに2つのケースで、あなたはの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;

は、他の2つのケースで、あなたはすでにそこにあるオブジェクトのIDを割り当てるしようとしているように見えます。これらの2行は、しても成功した場合、それは私には思える、何もしないでしょう。

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

あなただけのそれらを取り除くことができるようにます。

あなたはこれらの2つの変更を加えるとどうなる?

他のヒント

ハロー、

私は、問題は、私は提案を持っているかわからないんだが、

。あなたが方法(internshipToCreate)に渡していることをインターンシップオブジェクトは、メソッドのの内部をインスタンス化し、その作成というの の他のエンティティ(連絡先、入手可能)に転送値に使用されていますうまく動作します。

たぶん、あなたはインターンシップと同じことを行うようにしてください? _internshipEntities.AddToInternshipSet法への新しく作成されたオブジェクトのパスよりも、新しいインターンシップオブジェクトを作成し、internshipToCreateオブジェクトからそれらを取ることによって、あなたが持っているすべての値を設定します。

それはあなたが他の目的のために必要なことをinternshipToCreateオブジェクトのいくつかの値を設定していること、およびそれらのいくつかは、実際に例外を発生させている可能性があります。

そして、私はあなたがビジネスロジックがあるかわからないが、あなたが1つのトランザクションですべてを置く場合、このように、その最初の2つのエンティティが作成されている起こることがあるので、それは、良いだろう、と第三のものではない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top