实体框架代码优先 - 从类生成数据库

时间:2014-09-03 16:19:12

标签: c# wpf database entity-framework ef-code-first

我刚开始使用C#中的Entity Framework,并且我在测试项目中使用代码优先方法遇到了问题。我试图从我的角色类生成数据库,但我一直得到以下异常:

' 在类型' EFTesting.MainWindow'上调用构造函数。匹配指定的绑定约束会引发异常。'

我之前使用this tutorial完成了EF代码优先教程,但是对于当前的WPF项目,我对我的代码中断的原因感到困惑。

这是我的角色等级:

public class Character 
{
    public int ID { get; set;}
    public string Name { get; set; }
    public int Level { get; set; }
    public CharacterClass Character_Class { get; set; }
    public Gender _Gender { get; set; }
    public ObservableCollection<Item> Inventory { get; set; }

    //Navigation property 
    public virtual Character Contact { get; set; }
}

在我的主窗口中,我将字符添加到Collection中,然后将此集合绑定到我的ComboBox。在此之下,我将字符添加到Contact数据库。

    public MainWindow()
    {
        InitializeComponent();

        squad_members.Add(new Character() {ID = 1, Name = "Wacken", Level = 8, Character_Class = CharacterClass.Mage, _Gender = Gender.Male, Inventory = new ObservableCollection<Item>() { new Item("Gerrund Wand", "Magical Direction", 656, "Witcher Magical Wand", true ), new Item("Velcro Whip", "Whips your face off", 12, "Annoying as hell", true ), new Item("Invisibility Cloak", "Invisibility", 900, "Cloak of Invisibility", true)} });
        squad_members.Add(new Character() {ID = 2,  Name = "Vrigun", Level = 4, Character_Class = CharacterClass.Mage, _Gender = Gender.Female,  Inventory = new ObservableCollection<Item>() { new Item("Satanic Girdings", "Demonic Protection", 6660, "Clothing protects user from attack", true ), new Item("Viper Staff", "Poisons Enemy Resolve", 860, "Bites and Kills Everything", true ), new Item("Baal Mask", "Infects enemy mind", 6660, "Possesses User's Opponents", false ) }});

        Binding comboBinding = new Binding();
        comboBinding.Source = squad_members;
        BindingOperations.SetBinding(Character_ComboBox, ComboBox.ItemsSourceProperty, comboBinding);


        addToDataBase();
    }

    public void addToDataBase()
    {
        // DB BINDING
        using (var db = new CharacterContext())
        {
            //fails right here
            db.Contacts.Add(new Character() { ID = 1, Name = "Wacken", Level = 8, Character_Class = CharacterClass.Mage, _Gender = Gender.Male, Strength = 6, Intelligence = 9, Dexterity = 3, Gold = 1255, Inventory = new ObservableCollection<Item>() { new Item("Gerrund Wand", "Magical Direction", 656, "Witcher Magical Wand", true), new Item("Velcro Whip", "Whips your face off", 12, "Annoying as hell", true), new Item("Invisibility Cloak", "Invisibility", 900, "Cloak of Invisibility", true) } });
            db.SaveChanges();
        }
    }

另外,我的CharacterContext类与DB一起使用:

public class CharacterContext : DbContext
{
    public DbSet<Character> Contacts { get; set; }
}

我的意图是创建一个字符数据库。有什么我做错了吗?如果是这样,有什么建议可以解决这个问题?提前致谢。

编辑:我添加了应该将测试字符添加到数据库的方法addToDatabase()。我从这里调试它,程序在命中db.Contacts.Add()时失败。任何想法为什么会这样?

0 个答案:

没有答案