c# - 实体类型不是当前上下文模型的一部分
问题描述
我正在使用数据优先实体框架模型开发一个相当基本的 C# 应用程序。一切都很顺利,直到我向我的数据库中添加了第五个表并从数据库中更新了我的模型。我仍然可以在我的数据库中的所有其他表中添加、删除更新数据,但由于某种原因,我在添加到数据库中的最后一个表时一直遇到这个问题。我正在使用实体框架 6x
从我所做的所有研究来看,这似乎是人们遇到的一个相当普遍的问题,我尝试了一些建议,包括......
- 将连接字符串更改为 ADO.NET 连接字符串
- 从数据库中删除实体并更新我的 EDMX 模型。
- 在 context.cs 的 void OnModelCreating(DbModelBuilder modelBuilder) 函数中将实体连接到表
- 匹配 APP.config 和 Web.config 中的连接字符串。
到目前为止似乎没有任何效果。
//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.InternalSet1.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
解决方案
把它放在 MoniesEntities 类的 OnModelCreating 中:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Expense>().ToTable("Expenses");
}
推荐阅读
- python-3.x - 使用值 Python 启动多个变量
- swift - Swift:结构不符合协议可使用 MPMediaItemArtwork 解码
- javascript - 对于 Web,如果在多个选项卡中打开相同的应用程序,则会获取多个 firebase 通知
- python - 根据列单元格的值设置一列单元格的颜色示例 pandastable
- javascript - 在 iframe 中设置弹出窗口的位置
- mysql - 将本地 infile 中的数据插入 MySQL。更改了 local_infile 但仍然出现错误
- javascript - 我试图在 gojs 中使用 diagram.highlightCollection 来突出显示不符合特定条件的节点
- spring-boot - 带有秘密的 livenessProbe 在 Kubernetes 中不起作用
- java - Spring Security - 获取凭证返回 null
- c# - Unity - 编辑器自动刷新对象列表的 InvalidCastException(之前有效)