将数据添加到特定位置的上下文

时间:2017-09-05 13:30:47

标签: c# entity-framework

这是一个控制台应用程序,我只是在试验和学习。 问题是我不明白如何将特定位置的数据添加到数据库。

以下是我的模特:

public class Entity
{
    public virtual int entityId { get; set; }
    public virtual string name { get; set; }
    public virtual int lvl { get; set; }
    public virtual double hp { get; set; }
    public virtual int maxhp { get; set; }

    public virtual Inventory inventory { get; set; }
    public virtual Equipment equipment { get; set; }

    public virtual Skill skills { get; set; }
}

public class Inventory
{
    [Key]
    public virtual int invId { get; set; }
    public virtual List<Item> items { get; set; }
}

public class Item
{
    public virtual int itemId { get; set; }
    public virtual string itemName { get; set; }
    public virtual string type {get;set;}
}

public class Skill
{
    public virtual int skillId { get; set; }
    public virtual string skillName { get; set; }
    public virtual string type { get; set; }
}

public class Equipment
{
    public virtual int equipmentId { get; set; }
    public virtual Item helmet { get; set; }
    public virtual Item body { get; set; }
    public virtual Item legs { get; set; }
    public virtual Item weapon { get; set; }

}

我想将新项目添加到与库存有多对一关系的项目表中。 我想将数据添加到特定库存。 我的问题是,如果我这样做

Inventory inv = db.Entities.Where(e => e.entityId == eId).FirstOrDefault<Entity>().inventory;
                inv.items.Add(item);
                //db.Items.Add(item);
                db.SaveChanges();

然后该项目不会被添加

如果我这样做

    Inventory inv = db.Entities.Where(e => e.entityId == eId).FirstOrDefault<Entity>().inventory;
                //inv.items.Add(item);
                db.Items.Add(item);
                db.SaveChanges();

然后该项目不会被分配到正确的库存,而Inventory_InvId将为NULL

但如果我这样做

        Inventory inv = db.Entities.Where(e => e.entityId == eId).FirstOrDefault<Entity>().inventory;
                inv.items.Add(item);
                db.Items.Add(item);
                db.SaveChanges();

然后将正确添加项目。 谁能解释为什么它会像这样? 也有人能告诉我在特定地方添加物品的正确方法吗?

0 个答案:

没有答案