实体类型申请人不是当前上下文的模型的一部分

时间:2014-06-19 18:00:03

标签: c# asp.net-mvc entity-framework

我在尝试创建新申请人时收到错误“实体类型申请人不是当前上下文模型的一部分”。

我正在添加一个使用相同数据库实例但不同目录的现有项目。为此,我在我的解决方案中创建了一个单独的项目,其中包含我需要使用的目录的数据模型。我有一个app.config文件,其中包含与我的数据模型名称匹配的元数据(csdl,ssdl,msl),并指定我需要使用的目录。我相信我的数据模型设置正确 - 当我转到图表时,右键单击并选择“从数据库更新模型”,没有任何显示需要添加,在刷新选项卡上,它显示来自的表格列表目录。

这是我的DbContext:

namespace Employment.Data.External
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;

public partial class EmploymentEntities : DbContext
{
    public EmploymentEntities()
        : base("name=EmploymentEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public DbSet<Applicant> Applicants { get; set; }
    public DbSet<ApplicantPosting> ApplicantPostings { get; set; }
    public DbSet<Availability> Availabilities { get; set; }
    public DbSet<Department> Departments { get; set; }
    public DbSet<Education> Educations { get; set; }
    public DbSet<Employment> Employments { get; set; }
    public DbSet<Location> Locations { get; set; }
    public DbSet<Position> Positions { get; set; }
    public DbSet<Posting> Postings { get; set; }
    public DbSet<Reference> References { get; set; }
}
}

以下是申请人的部分课程中的创建方法:

namespace Employment.Data.External
{
partial class Applicant
{
    #region Public Methods

    public bool Create()
    {
        bool isSuccessful = false;

        try
        {
            using (EmploymentEntities entities = new EmploymentEntities())
            {
                this.ApplicationCreated = DateTime.UtcNow;

                entities.Applicants.Add(this);
                entities.SaveChanges();

                isSuccessful = true;
            }
        }
        catch (System.Data.Entity.Validation.DbEntityValidationException e)
        {
            foreach (var entityValidationError in e.EntityValidationErrors)
            {
                foreach (var error in entityValidationError.ValidationErrors)
                {
                    e.Data.Add(error.PropertyName, error.ErrorMessage);
                }
            }

            throw e;
        }

        return isSuccessful;
    }

错误发生在“entities.Applicants.Add(this);” 我的web.config中的连接字符串与app.config中的连接字符串匹配。我不相信在web.config中使用哪个连接字符串之间存在混淆,因为代码到达了我在实例化EmploymentEntities时使用新的DbContext / data模型添加的项目。

如何解决此错误?

更新 解决方案树图,以及我有实体引用的地方。

solution diagram

2 个答案:

答案 0 :(得分:1)

我不知道导致问题的原因,但我通过删除我的edmx文件并重新创建它来修复它(添加一个新的edmx,向导询问是从数据库创建还是创建为空。我选择了创建选项来自数据库)。

在我重新创建它之前,我尝试从数据库更新模型,这导致数据模型上下文文件(ExternalEmploymentDataModel.Context.cs)被消隐。所以,我的数据模型肯定有问题。删除数据模型并重新创建后,上下文文件有内容,然后我就能成功使用Create()方法。

答案 1 :(得分:0)

您的EmploymentEntities项目必须参考申请人项目(大会)