Tag: savechanges

使用EntityFramework 4为实体分配ID

我想为我的实体实现“默认”Id生成支持。 保存实体时,我希望EntityFramework只生成实体的id值(如果尚未设置)。 如果ID已经具有非null,非零值,我希望在将实体保存在数据库中时保留该实体ID。 我正在将数据从遗留数据模型(从旧数据库创建的EntityFramework模型)迁移到新创建的(模型优先)EntityFramework模型。 让我们称之为旧模型A和新模型T. 通常,我希望T实体在保存时设置它们的ID(它们都是int64),以便长期使用新模型。 目前,我明确地根据我正在迁移的相应A实体的Id来分配T实体ID。 这样就很容易检查迁移结果。 但是,虽然我可以将T实体的id分配给与迁移例程中的A实体相同的id,但在保存实体后,Id值已更改。 有没有办法覆盖T模型中所有实体的默认保存方法,因此只有在保存之前尚未在实体中设置id值时才分配id值? 我在这里看了一些其他的EntityFramework / Id问题,但在我看来,他们都没有问过同样的问题。 感谢任何线索。

在ASP.Net MVC 3项目中无法使用Entity Framework进行SaveChanges

学习asp.net mvc 3 + EF代码优先。 我是两个都是新手。 我的例子是微不足道的,但我仍然无法使其发挥作用。 缺少一些简单而明显的东西…… 我有一节课: public class Product { [HiddenInput(DisplayValue = false)] public int ProductID { get; set; } [Required(ErrorMessage = “Please enter a product name”)] public string Name { get; set; } [Required(ErrorMessage = “Please enter a description”)] [DataType(DataType.MultilineText)] public string Description { get; set; } [Required] [Range(0.01, double.MaxValue, ErrorMessage […]

不允许entity framework新事务,因为在会话中运行其他线程,multithreading保存

我试着在DB上保存multithreadingprocesso的日志,但是我收到以下错误:不允许新事务,因为会话中还有其他线程在运行。 在每个胎面我都有这个function: internal bool WriteTrace(IResult result, string message, byte type) { SPC_SENDING_TRACE trace = new SPC_SENDING_TRACE( message, Parent.currentLine.CD_LINE, type, Parent.currentUser.FULLNAME, Parent.guid); Context.SPC_SENDING_TRACE.AddObject(trace); if (Context.SaveChanges(result) == false) return false; return true; } 每个线程的Context都不同,但与DB的连接始终是相同的。 有没有办法解决这个问题? 谢谢Andrea

如何从Entity Framework 6中的Auditlog实体获取id

我知道那里有几个类似的post,但我找不到任何解决这个问题的方法。 我想在Entity Framework 6中添加,更改或删除实体(软删除)时添加(某种)AudioLog。我已经覆盖了SaveChanges,因为我只想为EntityStates添加,修改或删除的日志条目,我在第一次调用SaveChanges之前获取列表。 问题是,因为我需要记录已执行的操作,我需要检查实体的EntityState。 但是在调用SaveChanges之后,所有条目的EntityState都是Unchanged。 public override int SaveChanges() { using (var scope = new TransactionScope()) { var modifiedEntries = ChangeTracker.Entries() .Where(e => e.State == EntityState.Added || e.State == EntityState.Deleted || e.State == EntityState.Modified) .ToList(); int changes = base.SaveChanges(); foreach (var entry in modifiedEntries) { ApplyAuditLog(entry); } base.SaveChanges(); scope.Complete(); return changes; } } private […]

将TransactionScope与entity framework6一起使用

我无法理解的是,是否可以对上下文进行更改并在提交之前在同一事务中获取更改。 这就是我要找的: using (var scope = new TransactionScope(TransactionScopeOption.Required)) { using (var context = new DbContext()) { //first I want to update an item in the context, not to the db Item thisItem = context.Items.First(); thisItem.Name = “Update name”; context.SaveChanges(); //Save change to this context //then I want to do a query on the updated item […]

EntityFramework在保存更改之前显示实体

entity frameworkObjectSet及其方法ToList显示刚刚保存的实体。 这意味着,当我打电话 context.AddToCustomers(myNewCust); 然后(不调用SaveChanges) myDataGrid.DataContext = context.Customers.ToList(); DataGrid不显示新添加的实体(即使context.Customers.Count()也不包含它)。 有没有办法显示这些实体(那些具有EntityState = Added )? 提前致谢。

如何在Entity Framework中回滚事务

string[] usersToAdd = new string[] { “asd”, “asdert”, “gasdff6” }; using (Entities context = new Entities()) { foreach (string user in usersToAdd) { context.AddToUsers(new User { Name = user }); } try { context.SaveChanges(); //Exception thrown: user ‘gasdff6’ already exist. } catch (Exception e) { //Roll back all changes including the two previous users. } […]