- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 C#,我使用“从数据库生成”生成了我的数据库模型。 POCO 类和上下文是使用 T4 模板生成的。一切正常,应用程序能够编辑、插入等,除了我无法覆盖我的实体类中的 SaveChanges 方法。我需要这样做来添加业务逻辑。这是上下文类:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebApplication1
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class IInvoiceEntities2 : DbContext
{
public IInvoiceEntities2 ()
: base("name=IInvoiceEntities2 ")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<Company> Companies { get; set; }
public DbSet<CompanyDetail> CompanyDetails { get; set; }
public DbSet<CompanyVersion> CompanyVersions { get; set; }
public DbSet<CustomerDetail> CustomerDetails { get; set; }
}
}
知道为什么当我在其中设置断点并编辑实体时我的 SaveChanges 方法没有被触发吗?
更新:
我现在重写上下文类中的 ValidateEntity 方法以及 SaveChanges,但是当我编辑实体并在 SaveChanges 或 ValidateEntity 中设置断点时,这两个方法都没有被调用(参见上面的代码)
更新 2:
我现在已经在 App_Code 文件夹中为 SaveChanges 和 ValidateEntity 创建了一个部分类,但是这些方法仍然没有被执行:
namespace WebApplication1
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class IInvoiceEntities2 : DbContext
{
public IInvoiceEntities2 ()
: base("name=IInvoiceEntities2 ")
{
}
public override int SaveChanges()
{
return base.SaveChanges();
}
protected override DbEntityValidationResult ValidateEntity(
System.Data.Entity.Infrastructure.DbEntityEntry entityEntry,
IDictionary<object, object> items)
{
// do stuff
if (result.ValidationErrors.Count > 0)
{
return result;
}
else
{
return base.ValidateEntity(entityEntry, items);
}
}
}
最佳答案
如果你想覆盖保存更改,你可以使用这种分部类样式,需要注意的是,如果这里的方法没有被调用,这通常表明分部类与实际类不匹配,检查命名空间等。
public partial class MyEntities : DbContext
{
public override int SaveChanges()
{
try
{
SavingChanges();
return base.SaveChanges();
}
catch (Exception exception)
{
//handle errors here
}
}
private void SavingChanges()
{
using (var OC = new MyEntities())
{
var objects = this.ChangeTracker.Entries()
.Where(p => p.State == EntityState.Added ||
p.State == EntityState.Deleted ||
p.State == EntityState.Modified);
// handle auditing
AuditingHelperUtility.ProcessAuditFields(
objects.Where(p => p.State == EntityState.Added));
AuditingHelperUtility.ProcessAuditFields(
objects.Where(p => p.State == EntityState.Modified), InsertMode: false);
// Inserted objects
foreach (DbEntityEntry entry in objects
.Where(p => p.State == EntityState.Added))
{
if (entry.Entity != null)
{
// insert code
}
}
// Updated objects
foreach (DbEntityEntry entry in objects
.Where(p => p.State == EntityState.Modified))
{
if (entry.Entity != null)
{
// update code
}
}
// Delete objects
foreach (DbEntityEntry entry in objects
.Where(p => p.State == EntityState.Deleted))
{
if (entry.Entity != null)
{
// delete code
}
}
}
}
}
关于entity-framework - 覆盖 Entity Framework 5 中的 SaveChanges,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27237672/
我一直想知道的一个问题是,我应该显式调用 context.SaveChanges() 还是让它在 Dispose() 下。 方法 1:自动保存 public virtual void Disp
我正在使用EF5和“数据库优先”方法在WPF中编写第一个MVVM应用程序。 我在MVVM中的模型是EF5为我生成的(我确实需要自定义T4模板以包括INotifyPropertyChanged)。 一切
我使用 Visual Studio 在 ASP.NET MVC 项目中处理本地数据库。 我在修改数据库时遇到问题。当我调用 SaveChanges() 时,我总是会收到此错误: The value c
我正在使用 Entity Framework 同时插入对象,如下所示。 context = new MyContext(); foreach (var x in lstX) { var abc
我在 ObjectSet 中添加数据并在 ObjectContext 上执行了 SaveChanges。但是新数据没有显示在 DataGrid 中! 代码: bsWork.DataSource = P
我正在使用 Oracle 数据库和 ASP.net MVC4 创建一个应用程序。即使在代码中看起来没有问题,调用 SaveChanges()方法导致此处显示的错误: 这张图片显示了内部异常和相关细节
我刚开始使用 Entity Framework ,我能够使用 linq 进行选择操作,但我在插入时遇到了问题。我试过这个示例,看看有什么问题: testEntities te = ne
假设我在 Controller 中调用了这样的东西: using (var context = new SqlContext()) { context.Items.Add(new Item("
我的 Asp.net mvc web 应用程序中有以下 Action 方法:- [HttpPost] [ValidateAntiForgeryToken] public ActionResult Cr
目标框架:netstandard2.0 Entity Framework 核心:2.2.6 我在 OnModelCreating 中有以下代码: protected override void OnM
这个问题在这里已经有了答案: DbContext SaveChanges Order of Statement Execution (1 个回答) 7年前关闭。 当上下文包含相关实体和 SaveCha
我有一个使用 Entity Framework 6.1、代码优先创建的 SQL-Azure 数据库。 我的“EmazeEvents”表中的“日期时间”字段是这样创建的: datetime = c.Da
查看人们编写的示例,我发现很多人使用 SaveChanges 而不是使用 SaveChangesWithRetries。我认为 SaveChangesWithRetries 是最好的选择,那么仅使用
RavenDB 遇到一个奇怪的问题 public ActionResult Save(RandomModel model) { //Do some stuff, validate model etc.
有没有办法保存单个跟踪对象的更改,而不是 ObjectStateManager 中的所有对象,我的意思是: ObjectContext.SaveChanges(Contact) 最佳答案 也许您可以创
查看人们编写的示例,我发现很多人使用 SaveChanges 而不是使用 SaveChangesWithRetries。我认为 SaveChangesWithRetries 是最好的选择,那么仅使用
我正在尝试编写一个生成多张发票的方法。这是一所大学,其中客户在名为 Enrollments 的类(class)中与导师一起注册。通过这种方法,我试图将导师客户的月费乘以他们的佣金百分比,因为导师从
为什么 DbContext ctx 在每次 SaveChanges() 执行后处理得更快? 第一个样本: var ctx = new DomainContext(); foreach (var ite
我一直在玩 Entity Core 类,例如 DbContext,在尝试保存对象时遇到以下错误: An error occurred while saving entities that do not
场景如下 - 不同的用户通过从网页的下拉列表中选择一个值来进行更改。下拉列表包含在 DataView 中或通过构建表格。如果用户 A 对第 1 行进行了更改,它会更新数据库并在重新绑定(bind)后显
我是一名优秀的程序员,十分优秀!