【发布时间】:2013-12-01 10:17:11
【问题描述】:
当我尝试保存对上下文所做的更改时,我不断收到以下错误:
存储更新、插入或删除语句影响了意外 行数 (0)。实体可能已被修改或删除 实体已加载。刷新 ObjectStateManager 条目。
我有以下课程:
人
public class Person : IPerson
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Name
{
get
{
return FirstName + " " + LastName;
}
set{}
}
public string Email { get; set; }
public DateTime? LastModified { get; set; }
public virtual ICollection<Result> Results { get; set; }
}
用户资料
public class UserProfile : Person
{
public UserProfile()
{
Faculty = new Faculty();
Projects = new Collection<Project>();
Results = new Collection<Result>();
}
public string UserName { get; set; }
public string CNP { get; set; }
public virtual Faculty Faculty { get; set; }
public virtual ICollection<Project> Projects { get; set; }
}
结果
public abstract class Result:INamedEntity
{
protected Result()
{
ResultType = new ResultType();
}
public int Id { get; set; }
public string Name{get;set;}
public virtual ResultType ResultType { get; set; }
public virtual ICollection<Person> People { get; set; }
public DateTime? LastModified { get; set; }
}
在我使用以下方法向上下文添加值之后:
_ctx.Users.Single(u => u.Id == userId).Results.Add(result);
当我拨打_ctx.SaveChanges()时收到错误消息
将我的功能更新为:
public bool Save()
{
try
{
_ctx.SaveChanges();
}
catch (OptimisticConcurrencyException)
{
((IObjectContextAdapter)_ctx).ObjectContext.Refresh(RefreshMode.ClientWins,_ctx.Users);
((IObjectContextAdapter)_ctx).ObjectContext.Refresh(RefreshMode.ClientWins,_ctx.Results);
_ctx.SaveChanges();
}
return true;
}
但是没有发现错误。 谢谢
【问题讨论】:
-
首先,您使用的是实体框架代码优先方法,在这种情况下,“名称”属性应标记为“未映射”。
-
感谢您的回复,但我想允许用户编辑结果的名称
-
如何创建结果变量?这个结果是从结果表中获取的还是作为新结果创建的?
-
创建为来自我向用户显示的视图的新结果
-
这里有更好的解决方案stackoverflow.com/questions/1836173/…
标签: c# asp.net asp.net-mvc entity-framework