gpt4 book ai didi

entity-framework - EF 4.1 SaveChanges 不更新导航或引用属性

转载 作者:行者123 更新时间:2023-12-03 14:25:18 24 4
gpt4 key购买 nike

我首先使用代码,可以毫无问题地添加记录。数据库已正确创建并且已播种没有任何问题。但是在我的 Edit 操作中调用 SaveChanges() 只会更新实体,而不是任何导航或引用属性。

我的模型的简化版本:

public class Contact : IMyBaseObject
{
public Contact()
{
this.Delete = false;
this.ContactTypes = new HashSet<ContactType>();
}

public int Id {get; set;}

public string Name {get;set;}

public bool Delete {get;set;}

public virtual ICollection<ContactType> ContactTypes { get; set; }

public virtual USState USState { get; set; }

}

public class ContactType : MyBaseObject
{
public ContactType()
{
}

public int Id {get; set;}

public string Name {get;set;}

public virtual ICollection<Contact> Contacts {get;set;}
}

public abstract class Territory : MyBaseObject
{
public int Id {get; set;}

public string Name {get;set;}

public string Code {get;set;}
}

public class USState : Territory
{
public USState()
{
}

// Navigation properties
public virtual ICollection<Contact> Contacts { get; set; }
}

我不会包含代码,但我确实有一些自定义模型绑定(bind)正在进行。我的编辑操作(使用 MVC 3)没有填充 ContactType 或 USState 属性。绑定(bind)正确地返回了一个完全填充的 Contact 对象,该对象具有来自表单的正确值。

如果我正确理解 EF 4.1,则在保存我的联系人对象时,我只需执行以下操作即可将更改持久保存到数据库:
if(ModelState.IsValid)
{
context.Entry(contact).State = EntryState.Modified;
context.SaveChanges();
}

但是,当我这样做时,只会更新原始属性。在上面的例子中我遗漏了一些东西:我正在使用一个事务,一个 try catch block ,并检查它是否是一个新记录。

我使用了 SQL Profiler 并且可以确认 ContactType 和 Territory 表的更新查询是 不是 被发送到数据库服务器。

我的导航和引用属性的状态属性已修改,但我也尝试手动设置:
    context.Entry(contact).Collections("ContactTypes").EntityEntry.State = EntityState.Modified;
context.Entry(contact).Reference("USState").EntityEntry.State = EntityState.Modified;

我可能弄错了,但我很确定我的代码在 CTP5 下工作。

有任何想法吗?在这一点上,我不确定我应该如何进行调试。

谢谢,史蒂夫

最佳答案

试试这个:

  context.Entry(contact.USState ).State = EntityState.Modified; //////

关于entity-framework - EF 4.1 SaveChanges 不更新导航或引用属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5517182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com