C# “解决方案”;一个实体对象不能被IEntityChangeTracker的多个实例引用;错误
我正在尝试更新一个成员,该成员有很多关系,但收到一个错误,该错误表示,C# “解决方案”;一个实体对象不能被IEntityChangeTracker的多个实例引用;错误,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我正在尝试更新一个成员,该成员有很多关系,但收到一个错误,该错误表示,一个实体对象不能被多个IEntityChangeTracker实例引用。下面是我编写的各种模型和控制器。如有任何关于如何纠正此问题的建议,将不胜感激 会员模式 public partial class Member { NCOWW_DB db = new NCOWW_DB(); public Member() { this.Contacts = new HashSet<Contac
一个实体对象不能被多个IEntityChangeTracker实例引用。下面是我编写的各种模型和控制器。如有任何关于如何纠正此问题的建议,将不胜感激
会员模式
public partial class Member
{
NCOWW_DB db = new NCOWW_DB();
public Member()
{
this.Contacts = new HashSet<Contact>();
this.Utilities = new HashSet<Utility>();
}
public int MemberID { get; set; }
[Display(Name = "Member Name")]
[Required]
public string Name { get; set; }
[Display(Name = "Member Number")]
public string Number { get; set; }
[Display(Name = "Mutual Aid Agreement On File")]
public bool MutualAid { get; set; }
[Display(Name = "Type ID")]
public Nullable<int> TypeID { get; set; }
[ForeignKey("TypeID")]
public virtual UtilityType MemberType { get; set; }
[Display(Name = "Water Population")]
public Nullable<int> WaterPopulation { get; set; }
[Display(Name = "Wastewater Population")]
public Nullable<int> WastewaterPopulation { get; set; }
private Address _Address = new Address();
public Address Address { get { return _Address; } set { _Address = value; } }
private Coordinates _Coordinates = new Coordinates();
public Coordinates Coordinates { get { return _Coordinates; } set { _Coordinates = value; } }
[NotMapped]
public double Distance { get; set; }
public bool Deleted { get; set; }
[Display(Name = "Enable Member")]
public bool Enabled { get; set; }
private DateTime _createdOn = DateTime.UtcNow;
public DateTime CreatedOn { get { return _createdOn; } set { _createdOn = value; } }
private DateTime _modifiedOn = DateTime.UtcNow;
public DateTime ModifiedOn { get { return _modifiedOn; } set { _modifiedOn = value; } }
public System.Guid ModifiedBy { get; set; }
//public virtual ICollection<Utility> Contacts { get; set; }
private ICollection<Contact> _Contacts;
public virtual ICollection<Contact> Contacts {
get
{
return (from c in db.Contact
where (c.MemberID == MemberID && c.Deleted == false)
select c).OrderBy(c => c.FirstName).ToList();
}
set
{
_Contacts = value;
}
}
//public virtual ICollection<Utility> Utilities { get; set; }
private ICollection<Utility> _Utilities;
public virtual ICollection<Utility> Utilities
{
get
{
return (from u in db.Utility
where (u.MemberID == MemberID && u.Deleted == false)
select u).OrderBy(u => u.Name).ToList();
}
set
{
_Utilities = value;
}
}
}
当您设置成员的属性时,它会自动获取修改后的状态so语句
db.Entry(member.State=EntityState.Modified代码>是不需要的
但我不知道将实体附加到dbcontext的位置,这可能是代码中的另一个问题。
看来你应该打电话来
db.Members.Attach(member);
当您设置成员的属性时,它会自动获取修改后的状态so语句
db.Entry(member.State=EntityState.Modified代码>是不需要的
但我不知道将实体附加到dbcontext的位置,这可能是代码中的另一个问题。
看来你应该打电话来
db.Members.Attach(member);
当您设置成员的属性时,它会自动获取修改后的状态so语句
db.Entry(member.State=EntityState.Modified代码>是不需要的
但我不知道将实体附加到dbcontext的位置,这可能是代码中的另一个问题。
看来你应该打电话来
db.Members.Attach(member);
当您设置成员的属性时,它会自动获取修改后的状态so语句
db.Entry(member.State=EntityState.Modified代码>是不需要的
但我不知道将实体附加到dbcontext的位置,这可能是代码中的另一个问题。
看来你应该打电话来
db.Members.Attach(member);
您在处理多个上下文时非常粗心(甚至没有正确处理)。在每个成员
和实用程序
实体中,您实例化了一个新的上下文:
NCOWW_DB db = new NCOWW_DB();
并在属性获取程序中使用它,如Member.Contacts
(即使没有保护,如果集合尚未加载,那么每次访问属性时都会得到一个DB查询)
发生特定异常是因为db.Entry(member).State=EntityState.Modified
将成员
实体和所有相关实体附加到上下文db
。为了附加相关的联系人
实体,EF必须接触属性getter成员。Contacts
将在getter中运行查询,该查询将联系人
实体附加到另一个上下文,即您在成员
实体中实例化的上下文。不允许将同一对象附加到两个不同的上下文,这会导致异常
您应该以某种方式重构代码,以确保对DB操作只使用相同的上下文实例。特别是我不想在实体中创建上下文成员。对于这样的查询,最好的地方是存储库、数据访问或服务层,或者任何您喜欢称之为它们的地方。您在处理多个上下文时非常粗心(甚至没有正确地处理)。在每个成员
和实用程序
实体中,您实例化了一个新的上下文:
NCOWW_DB db = new NCOWW_DB();
并在属性获取程序中使用它,如Member.Contacts
(即使没有保护,如果集合尚未加载,那么每次访问属性时都会得到一个DB查询)
发生特定异常是因为db.Entry(member).State=EntityState.Modified
将成员
实体和所有相关实体附加到上下文db
。为了附加相关的联系人
实体,EF必须接触属性getter成员。Contacts
将在getter中运行查询,该查询将联系人
实体附加到另一个上下文,即您在成员
实体中实例化的上下文。不允许将同一对象附加到两个不同的上下文,这会导致异常
您应该以某种方式重构代码,以确保对DB操作只使用相同的上下文实例。特别是我不想在实体中创建上下文成员。对于这样的查询,最好的地方是存储库、数据访问或服务层,或者任何您喜欢称之为它们的地方。您在处理多个上下文时非常粗心(甚至没有正确地处理)。在每个成员
和实用程序
实体中,您实例化了一个新的上下文:
NCOWW_DB db = new NCOWW_DB();
并在属性获取程序中使用它,如Member.Contacts
(即使没有保护,如果集合尚未加载,那么每次访问属性时都会得到一个DB查询)
发生特定异常是因为db.Entry(member).State=EntityState.Modified
将成员
实体和所有相关实体附加到上下文db
。为了附加相关的联系人
实体,EF必须接触属性getter成员。Contacts
将在getter中运行查询,该查询将联系人
实体附加到另一个上下文,即您在成员
实体中实例化的上下文。不允许将同一对象附加到两个不同的上下文,这会导致异常
您应该以某种方式重构代码,以确保对DB操作只使用相同的上下文实例。特别是我不想在实体中创建上下文成员。对于这样的查询,最好的地方是存储库、数据访问或服务层,或者任何您喜欢称之为它们的地方。您在处理多个上下文时非常粗心(甚至没有正确地处理)。在每个成员
和实用程序
实体中,您实例化了一个新的上下文:
NCOWW_DB db = new NCOWW_DB();
并在属性获取程序中使用它,如Member.Contacts
(即使没有保护,如果集合未被删除)