gpt4 book ai didi

c# - Entity Framework 不保存所有更改

转载 作者:行者123 更新时间:2023-11-30 15:32:34 25 4
gpt4 key购买 nike

看到这个我差点掉眼泪。

我有一个用户对象这个对象有几个属性 FirstName、LastName 等,都是简单的类型。 String int 等

这些可以正常加载和更新。

public class Jobwalker
{
[Key]
public Int64 ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public bool Suspended { get; set; }
public TelephoneCountryCode TelephoneCountryCodeObject { get; set; }
...

但是 userobject 还有一个属性 'TelephoneCountryCodeObject',这是另一个类

public class TelephoneCountryCode
{
[Key]
public Guid ID { get; set; }
public string Code { get; set; }
public string Country { get; set; }

public TelephoneCountryCode()
{
}
...

我可以创建删除一个 dmodify 'TelephoneCountryCode' 对象就好了,但是当我尝试保存用户对象的实例时,只有简单类型会更新吗?

public void Save()
{
try
{
using (var db = new MainContext())
{

db.TelephoneCountryCodes.Attach(TelephoneCountryCodeObject);
Jobwalker result = (from jw in db.Jobwalkers
.Include("TelephoneCountryCodeObject")
where jw.UmbracoMemberID == UmbracoMemberID
select jw).FirstOrDefault();


db.Entry(result).CurrentValues.SetValues(this);

if (this.TelephoneCountryCodeObject != null)
{
result.TelephoneCountryCodeObject = db.TelephoneCountryCodes.Find(this.TelephoneCountryCodeObject.ID);
}
else
{
result.TelephoneCountryCodeObject = null;
}

db.Entry(result).State = EntityState.Modified;

db.SaveChanges();
}
}
catch(Exception ex)
{
throw;
}
}

任何想法将不胜感激!

编辑:我创建了这个 super 简单的测试方法

 public static void TEST()
{
try
{
using (var db = new MainContext())
{
Jobwalker result = (from jw in db.Jobwalkers
.Include("TelephoneCountryCodeObject")
where jw.UmbracoMemberID == 1184
select jw).FirstOrDefault();



result.TelephoneCountryCodeObject = TelephoneCountryCode.GetByName("denmark");
db.TelephoneCountryCodes.Attach(result.TelephoneCountryCodeObject);
result.FirstName = "Flemming";

db.SaveChanges();
}
}
catch (Exception ex)
{
throw;
}
}

这就像它应该的那样工作。那为什么 ** 我的常规 Save() 方法不起作用?

最佳答案

如果你需要更新一个分离的实体(例如你实例化对象而不从数据库中获取),你应该有它的主键并使用下面的代码:

public void Update(Jobwalker detachedEntity)
{
DB.Jobwalkers.Attach(detachedEntity);
DB.Entry(detachedEntity).State = EntityState.Modified;
}

// in your code to save Jobwalker detached object do this:
Update(this); // `this` is the Jobwalker detached object
DB.SaveChanges();

不需要额外的代码,EF 将检测您的更改并更新实体并将子实体添加到数据库。

关于c# - Entity Framework 不保存所有更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18838761/

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