[英]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.