Entity framework 未设置Entityframework ID
我的项目中有以下对象。“Gast”-对象可以有许多“Aufenthalt”-对象,“Aufenthalt”-对象可以有许多“Mitreisender”-对象。每个“Mitreisender”只能分配给一个“Aufenthalt”,每个“Aufenthalt”只能分配给一个Gast 当我点击按钮2时,一切正常,但在Aufenthalt中只有“Gast”的ID为空Entity framework 未设置Entityframework ID,entity-framework,Entity Framework,我的项目中有以下对象。“Gast”-对象可以有许多“Aufenthalt”-对象,“Aufenthalt”-对象可以有许多“Mitreisender”-对象。每个“Mitreisender”只能分配给一个“Aufenthalt”,每个“Aufenthalt”只能分配给一个Gast 当我点击按钮2时,一切正常,但在Aufenthalt中只有“Gast”的ID为空 public class Gast { public int GastID { get; set; } public s
public class Gast
{
public int GastID { get; set; }
public string Anrede { get; set; }
public string Titel { get; set; }
public string Vorname { get; set; }
public string Nachname { get; set; }
public virtual List<Aufenthalt> Aufenthalte {get; set;}
public Gast()
{
Aufenthalte = new List<Aufenthalt>();
}
}
public class Mitreisender
{
public int MitreisenderID { get; set; }
public string Anrede { get; set; }
public string Titel { get; set; }
public string Vorname { get; set; }
public string Nachname { get; set; }
public DateTime Geburtstag { get; set; }
public virtual Aufenthalt Aufenthalt { get; set; }
}
public class Aufenthalt
{
public int AufenthaltID { get; set; }
public DateTime Anreisedatum { get; set; }
public DateTime Abreisedatum { get; set; }
public virtual List<Mitreisender> Mitreisende { get; set; }
public virtual Gast Gast { get; set; }
public Aufenthalt()
{
Mitreisende = new List<Mitreisender>();
}
}
由于您已在事件处理程序中创建了新的上下文,因此上下文不会跟踪currentGast 删除此代码:
currentGast.Aufenthalte.Add(aufenthalt);
db.Aufenthalte.Add(aufenthalt);
db.SaveChanges();
var cg = db.Gaste.Single(x => x.GastID == currentGast.GastID );
cg.Aufenthalte.Add(aufenthalt);
db.SaveChanges();
将其替换为以下代码:
currentGast.Aufenthalte.Add(aufenthalt);
db.Aufenthalte.Add(aufenthalt);
db.SaveChanges();
var cg = db.Gaste.Single(x => x.GastID == currentGast.GastID );
cg.Aufenthalte.Add(aufenthalt);
db.SaveChanges();
由于您已在事件处理程序中创建了新的上下文,因此上下文不会跟踪currentGast 删除此代码:
currentGast.Aufenthalte.Add(aufenthalt);
db.Aufenthalte.Add(aufenthalt);
db.SaveChanges();
var cg = db.Gaste.Single(x => x.GastID == currentGast.GastID );
cg.Aufenthalte.Add(aufenthalt);
db.SaveChanges();
将其替换为以下代码:
currentGast.Aufenthalte.Add(aufenthalt);
db.Aufenthalte.Add(aufenthalt);
db.SaveChanges();
var cg = db.Gaste.Single(x => x.GastID == currentGast.GastID );
cg.Aufenthalte.Add(aufenthalt);
db.SaveChanges();
除了@jannagy02的答案外:您还可以将
currentGast
附加到上下文。因此,与其
currentGast.Aufenthalte.Add(aufenthalt);
db.Aufenthalte.Add(aufenthalt);
db.SaveChanges();
你会的
db.Gaste.Attach(currentGast);
currentGast.Aufenthalte.Add(aufenthalt);
db.SaveChanges();
正如janagy02在下面指出的那样:只有当
currentGast
尚未连接到另一个DbContext
时,这才有效。但是,在这种情况下,我会注意到在同一个应用程序响应上下文中有多个openDbContext
s(连接到同一个数据库)不是我推荐的做法。除了@jannagy02的答案之外:您还可以将currentGast
连接到上下文。因此,与其
currentGast.Aufenthalte.Add(aufenthalt);
db.Aufenthalte.Add(aufenthalt);
db.SaveChanges();
你会的
db.Gaste.Attach(currentGast);
currentGast.Aufenthalte.Add(aufenthalt);
db.SaveChanges();
正如janagy02在下面指出的那样:只有当
currentGast
尚未连接到另一个DbContext
时,这才有效。但是,在这种情况下,我会注意到,在同一个应用程序响应上下文中有多个openDbContext
s(连接到同一个数据库)不是我建议的做法。如何获取其值?currentGast
如何获取其值?是的,但是因为我们没有看到所有的代码,可能是currentGast已附加到上下文的另一个实例,然后出现异常。是的,但由于我们没有看到所有代码,可能是currentGast已附加到上下文的另一个实例,然后出现异常。