[英]Entity Framework Code first wrong saving
我在了解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
以及一个带有几个Weapon
weaponHolder
。 当我尝试保存Hero
,使用
heroContext.MyHeroes.Add(hero);
它确实保存了SpecialItems
但没有保存WeaponHolder
和内容。 如果我确实使用weaponHolder
“手动”保存了我的weaponHolder
heroContext.MyWeaponHolders.Add(hero.weaponHolder);
然后按预期方式保存WeaponHolder
及其Weapons
。
我注意到EF并未在Hero
和WeaponHolder
之间创建外键,但是我确实手动添加了一个外键,并且没有注意到保存方式的任何变化。
为什么不能自动EF救了我的Hero
的WeaponHolder
当我救了我的Hero
? 我可以手动保存吗? 如果是这样,我如何保存我的Hero
主键,以便将我的WeaponHolder
外键手动链接到正确的值?
对于Hero中的单个实体(例如WeaponHolder属性),它也将像其中引用ID
public int WeaponHolderID { get; set; }
该实现缺少该功能。 您所指的关系是否正确设置?
多亏了Brian Mains的帮助,我才得以使它正常工作。
为了能够正确检索我的属性,我错过了很多获取/设置方法。
而且我确实确实必须为每个键添加一个新的ID字段,然后将我的[ForeignKey("...")]
放在上面。
我的代码现在看起来像这样:
public class Character
{
[Key]
public int CharacterID { get; set; }
[Column("name")]
public string name { get; set; }
[Column("maxLife")]
protected int maxHitPoint{ get; set; }
[Column("actualLife")]
protected int actualHitPoint{ get; set; }
[Column("baseAgility")]
protected int baseAgility{ get; set; }
}
public class Hero : Character
{
[ForeignKey("weaponHolder")]
public int WeaponHolderID { get; set; }
[ForeignKey("backPack")]
public int BackPackID { get; set; }
[Column("Gold")]
private int gold{ get; set; }
public WeaponHolder weaponHolder{ get; set; }
public List<SpecialItem> specialItems{ get; set; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.