我在尝试创建新申请人时收到错误“实体类型申请人不是当前上下文模型的一部分”。
我正在添加一个使用相同数据库实例但不同目录的现有项目。为此,我在我的解决方案中创建了一个单独的项目,其中包含我需要使用的目录的数据模型。我有一个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模型添加的项目。
如何解决此错误?
更新 解决方案树图,以及我有实体引用的地方。
答案 0 :(得分:1)
我不知道导致问题的原因,但我通过删除我的edmx文件并重新创建它来修复它(添加一个新的edmx,向导询问是从数据库创建还是创建为空。我选择了创建选项来自数据库)。
在我重新创建它之前,我尝试从数据库更新模型,这导致数据模型上下文文件(ExternalEmploymentDataModel.Context.cs)被消隐。所以,我的数据模型肯定有问题。删除数据模型并重新创建后,上下文文件有内容,然后我就能成功使用Create()方法。
答案 1 :(得分:0)
您的EmploymentEntities项目必须参考申请人项目(大会)