首页 > 解决方案 > 实体类型不是当前上下文模型的一部分

问题描述

我正在使用数据优先实体框架模型开发一个相当基本的 C# 应用程序。一切都很顺利,直到我向我的数据库中添加了第五个表并从数据库中更新了我的模型。我仍然可以在我的数据库中的所有其他表中添加、删除更新数据,但由于某种原因,我在添加到数据库中的最后一个表时一直遇到这个问题。我正在使用实体框架 6x

从我所做的所有研究来看,这似乎是人们遇到的一个相当普遍的问题,我尝试了一些建议,包括......

到目前为止似乎没有任何效果。

//Monies.Context.cs
namespace MoneyManager.DB
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;

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

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

        public virtual DbSet<Country> Countries { get; set; }
        public virtual DbSet<Vendor> Vendors { get; set; }
        public virtual DbSet<Category> Categories { get; set; }
        public virtual DbSet<SubCategory> SubCategories { get; set; }
        public virtual DbSet<User> Users { get; set; }
        public virtual DbSet<Expense> Expenses { get; set; }
    }
}
//Expense.cs
namespace MoneyManager.DB
{
    using System;
    using System.Collections.Generic;

    public partial class Expense
    {
        public System.Guid ExpenseId { get; set; }
        public System.Guid VendorId { get; set; }
        public System.Guid UserId { get; set; }
        public System.Guid CategoryId { get; set; }
        public System.Guid SubCategoryId { get; set; }
        public MoneyManager.DTO.Enums.PaymentMode PaymentMode { get; set; }
        public int PaymentMethod { get; set; }
        public string PaymentDetail { get; set; }
        public string Comment { get; set; }
        public decimal Amount { get; set; }
        public System.DateTime ExpenseDate { get; set; }
    }
}

//ExpenseRepository.cs
namespace MoneyManager.DB
{
    public class ExpenseRepository
    {

        public static void SaveExpense(DTO.Expense dtoExpense)
        {
            MoniesEntities db = new MoniesEntities();

            MoneyManager.DB.Expense expense = new MoneyManager.DB.Expense();

            expense.Amount = dtoExpense.Amount;
            expense.CategoryId = dtoExpense.CategoryId;
            expense.Comment = dtoExpense.Comment;
            expense.ExpenseDate = dtoExpense.ExpenseDate;
            expense.ExpenseId = dtoExpense.ExpenseId;
            expense.PaymentDetail = dtoExpense.PaymentDetail;
            expense.PaymentMethod = dtoExpense.PaymentMethod;
            expense.PaymentMode = dtoExpense.PaymentMode;
            expense.SubCategoryId = dtoExpense.SubCategoryId;
            expense.UserId = dtoExpense.UserId;
            expense.VendorId = dtoExpense.VendorId;


            db.Expenses.Add(expense);  //This is where I get this error
            db.SaveChanges();
        }
    }
}

//连接字符串

这是堆栈跟踪

InvalidOperationException:实体类型 Expense 不是当前上下文模型的一部分。
System.Data.Entity.Internal.InternalContext.UpdateEntitySetMappingsForType(Type entityType) +209
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +51
System.Data.Entity.Internal.Linq.InternalSet 1.get_InternalContext() +38 System.Data.Entity.Internal.Linq.InternalSet 1.Add(Object entity) +200 System.Data.Entity.DbSet`1.Add(TEntity entity) +130 MoneyManager.DB.ExpenseRepository.SaveExpense(Expense dtoExpense)在 c:\MoneyManager\MoneyManager.DB\ExpenseRepository.cs:311.Initialize() +137
System.Data.Entity.Internal.Linq.InternalSet
1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) +236
System.Data.Entity.Internal.Linq.InternalSet


MoneyManager.Domain.ExpenseManager.SaveExpense(Expense dtoExpense) in c:\MoneyManager\MoneyManager.Domain\ExpenseManager.cs:13 c:\ MoneyManager.Web.ExpenseNew.submitButton_Click(Object sender, EventArgs e) in MoneyManager\MoneyManager.Web\ ExpenseNew.aspx.cs:93
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9782698

标签: c#entity-frameworkef-database-first

解决方案


把它放在 MoniesEntities 类的 OnModelCreating 中:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Expense>().ToTable("Expenses");
}

推荐阅读