我遵循两个实体RelayConfig和StandardContact之间的多对多关系
实体:
public class RelayConfig : EntityBase, IDataErrorInfo {
...
//Associations
public virtual ICollection<StandardContact> StandardContacts { get; set; }
}
public class StandardContact :EntityBase, IDataErrorInfo {
...
//Associations
public virtual ICollection<RelayConfig> RelayConfigs { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试更新RelayConfig及其与StandardContact的关系.这是更新RelayConfig的代码.
public class RelayConfigRepository : GenericRepository<RelayConfig> {
....
public void Update(RelayConfig relayConfig, List<StandardContact> addedContacts, List<StandardContact> deletedContacts) {
context.RelayConfigs.Add(relayConfig);
if (relayConfig.Id > 0) {
context.Entry(relayConfig).State = EntityState.Modified;
}
addedContacts.ForEach(ad => relayConfig.StandardContacts.Add(ad));
foreach (StandardContact standardContact in relayConfig.StandardContacts) {
if (standardContact.Id > …Run Code Online (Sandbox Code Playgroud) 我有以下EF代码的第一个代码.它工作正常.但当我寻找'club2.Members'的价值时,它会说:
'club2.Members'抛出了'System.ObjectDisposedException'类型的异常.
消息是:
ObjectContext实例已被释放,不能再用于需要连接的操作.
我没有为Members属性设置值.没关系.但是它不应该在内部引起任何异常.
注意:我不需要俱乐部实体中的会员数据(在我打电话的时候).即使当时没有成员加入俱乐部.我只需要摆脱异常; 不使用预先加载来加载数据.如何避免异常?

namespace LijosEF
{
public class Person
{
public int PersonId { get; set; }
public string PersonName { get; set; }
public virtual ICollection<Club> Clubs { get; set; }
}
public class Club
{
public int ClubId { get; set; }
public string ClubName { get; set; }
public virtual ICollection<Person> Members { get; set; }
}
//System.Data.Entity.DbContext is from EntityFramework.dll
public class NerdDinners : System.Data.Entity.DbContext
{
public …Run Code Online (Sandbox Code Playgroud) 我在保存对数据库的更改时遇到问题.
我正在更新控制器中的模型A,但是当我使用SaveChanges()保存更改时,我最终在数据库中为B创建了一个重复的项目.
在调用UpdateModel()之后,我检查了Bs属性,它就像我预期的那样,在调用SaveChanges()后,如果我检查Bs属性,我将看到Id完全不同(新Id和新条目).
我的班级与此类似:
public class A
{
[HiddenInput(DisplayValue = false)]
public int AId { get; set; }
public string Name { get; set; }
public virtual ICollection<B> Bs{ get; set; }
}
public class B
{
[HiddenInput(DisplayValue = false)]
public int BId { get; set; }
public string Name { get; set; }
public virtual ICollection<A> As{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的控制器是这样的:
[HttpPost]
public ActionResult Edit(A theA)
{
try
{
db.Entry(theA).State = EntityState.Modified;
foreach (var item in theA.Bs)
{ …Run Code Online (Sandbox Code Playgroud)