Добавить объект в Entity Framework с помощью навигационного свойства - PullRequest
1 голос
/ 06 июля 2011

Привет, я использую C # и EF 4.

У меня есть две сущности CmsContent и CmsJob.CmsJob имеет навигационное свойство до CmsContent.

Мне нужно добавить CmsContent Объект к CmsJob, используя навигационное свойство.

Мой код запускаетсябез ошибок, но я не могу сохранить новую запись om DataBase.

Не могли бы вы сказать мне, что я делаю неправильно?Пожалуйста, предоставьте мне пример кода.Спасибо за вашу поддержку!

       using (CmsConnectionStringEntityDataModel context = new CmsConnectionStringEntityDataModel())
        {
            CmsContent myContent = context.CmsContents.FirstOrDefault(x => x.ContentId == contentId);
            CmsJob myJob = context.CmsJobs.FirstOrDefault(x => x.JobId == jobId);
            myJob.CmsContents.Add(myContent);
        }

Ответы [ 2 ]

2 голосов
/ 06 июля 2011

На основании комментариев под ответом @ Hasan у вас неверно определена база данных. Ваше задание и контент связаны между собой, поэтому у вас есть соединительная таблица с именем CmsJobsContents, но в этой таблице отсутствует первичный ключ. Из-за этого это только для чтения для EF, и вы не можете создавать новые отношения в вашем приложении. Вы должны зайти в свою базу данных и отметить оба FK в CmsJobsContents как первичные ключи. После этого обновите модель из базы данных, и вы сможете сохранить изменения.

2 голосов
/ 06 июля 2011

Это потому, что вы не сохранили изменения. Попробуйте это:

using (CmsConnectionStringEntityDataModel context = new CmsConnectionStringEntityDataModel())
    {
        CmsContent myContent = context.CmsContents.FirstOrDefault(x => x.ContentId == contentId);
        CmsJob myJob = context.CmsJobs.FirstOrDefault(x => x.JobId == jobId);
        myJob.CmsContents.Add(myContent);
        context.SaveChanges();
    }
...