我在理解EF如何保存我的实体时遇到问题。 我有我DbContext
:实体框架代码第一次保存错误
public DbSet<Hero> MyHeroes { get; set; }
public DbSet<SpecialItem> SpecialItems { get; set; }
public DbSet<Weapon> MyWeapons { get; set; }
public DbSet<WeaponHolder> MyWeaponHolders { get; set; }
我的 “主” 实体Hero
,从Character
继承:
public class Character
{
[Key]
public int CharacterID { get; set; }
[Column("name")]
protected string name;
[Column("maxLife")]
protected int maxHitPoint;
[Column("actualLife")]
protected int actualHitPoint;
[Column("baseAgility")]
protected int baseAgility;
}
public class Hero : Character
{
[Column("Gold")]
private int gold;
public WeaponHolder weaponHolder;
public List<SpecialItem> specialItems;
}
它包含了WeaponHolder
:
public class WeaponHolder
{
[Key]
public int WeaponHolderID { get; set; }
[Column("weaponHolderSize")]
private int weaponHolderSize;
List<Weapon> weapons;
}
它可以包含若干个Weapon
:
public class Weapon : Loot
{
[Column("name")]
string name;
[Column("WeaponType")]
WeaponTypes weaponType;
}
我正在创建一个Hero
并给他几个SpecialItems
和weaponHolder
以及几个Weapon
。当我试图挽救我的Hero
,使用
heroContext.MyHeroes.Add(hero);
它并保存它的SpecialItems
但它不保存其WeaponHolder
和内容。如果我不救我weaponHolder
“手动”使用
heroContext.MyWeaponHolders.Add(hero.weaponHolder);
那么它确实如预期保存WeaponHolder
及其Weapons
。
我注意到EF没有在Hero
和WeaponHolder
之间创建一个外键,但是我手动添加了一个,并没有注意到保存配置的任何改变。
当我保存我的Hero
时,为什么EF不自动保存我的Hero
的WeaponHolder
?我可以手动保存吗?如果是这样,只要我保存他以便手动将我的WeaponHolder
外键链接到正确的值,我如何检索我的Hero
主键?
我不知道我理解正确答案。 你的意思是我应该加上'public int WeaponHolderID {get;组; }'到我的'英雄'级? 我假设EF负责在一对一关系的情况下创建外键。 – Belterius
它高度依据存在ID属性。没有真正的1对1关系;它总是将其中一方视为一对多。如果英雄是关系中的PK,是的它应该有WeaponHolderID作为属性,但是如果WeaponHolder是PK,英雄应该有一个WeaponHolder对象列表并且没有WeaponHolderID属性。 –