使用导航属性将对象添加到实体框架

时间:2011-07-06 08:07:44

标签: entity-framework entity-relationship

您好我使用C#和EF 4。

我有两个实体CmsContentCmsJobCmsJob导航属性CmsContent

我需要使用导航属性向CmsContent添加CmsJob对象。

我的代码运行没有错误,但我不能保留新的数据库条目。

你可以告诉我我做错了什么吗? 请给我一个代码示例。感谢您的支持!

       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 个答案:

答案 0 :(得分:2)

那是因为你没有保存更改。试试这个:

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();
    }

答案 1 :(得分:2)

根据@ Hasan的回答,根据您的回答,您错误地定义了数据库。您的作业和内容是多对多关系,因此您有一个名为CmsJobsContents的联结表,但此表缺少主键。因此,它对于EF是只读的,您无法在应用程序中创建新关系。您必须转到数据库并将CmsJobsContents中的两个FK标记为主键。之后,从数据库更新您的模型,您应该能够保存更改。