Entity framework 未设置Entityframework 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

我的项目中有以下对象。“Gast”-对象可以有许多“Aufenthalt”-对象,“Aufenthalt”-对象可以有许多“Mitreisender”-对象。每个“Mitreisender”只能分配给一个“Aufenthalt”,每个“Aufenthalt”只能分配给一个Gast

当我点击按钮2时,一切正常,但在Aufenthalt中只有“Gast”的ID为空

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
时,这才有效。但是,在这种情况下,我会注意到在同一个应用程序响应上下文中有多个open
DbContext
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
时,这才有效。但是,在这种情况下,我会注意到,在同一个应用程序响应上下文中有多个open
DbContext
s(连接到同一个数据库)不是我建议的做法。

如何获取其值?
currentGast
如何获取其值?是的,但是因为我们没有看到所有的代码,可能是currentGast已附加到上下文的另一个实例,然后出现异常。是的,但由于我们没有看到所有代码,可能是currentGast已附加到上下文的另一个实例,然后出现异常。