EntityFramework.dll中发生未处理的异常类型'System.Data.Entity ... ModelValidationException'

时间:2015-01-02 01:52:46

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

所以我遇到了这个错误:

  

未处理的类型异常   'System.Data.Entity.ModelConfiguration.ModelValidationException'   发生在EntityFramework.dll中。

private void button_Click(object sender, RoutedEventArgs e)
{
        MessageBox.Show("Are you sure?");

        var db = new AndmebaasContext();
        Console.WriteLine("vajtuasid comboboxi");
        string name = "Peeter";
        int number = 5081976;
        long isikukood = 39502266016;
        bool Kliendikaart = true;

        //DateTime TulebJargi = new DateTime(02, 01, 2015);
       // DateTime ToobTagasi = new DateTime(23, 01, 2015);

        string lumelauad = "Flow 150";
        string MaeSuusad = "Rossignol 170";

        var kliendinimi =  new Kliendid { KliendiNimi = name};
        db.Kontakt.Add(kliendinimi);// ERROR Seems to be HERE!!!
        db.SaveChanges();

        var query = from b in db.Kontakt
                    orderby b.KliendiNimi
                    select b;


        foreach (var item in query)
        {
            Console.WriteLine(item.KliendiNimi);
        }

所以这是wpf中主脚本的一部分,我写了一个注释,其中visual studio编译器为我显示错误。

public class AndmebaasContext : DbContext
{
    public DbSet<Kliendid> Kontakt { get; set; }
    public DbSet<KliendiRendiAndmed> KliendiRendiAndmed { get; set; }
    public DbSet<KliendiRenditudVarustus> KliendiRenditudVarustus { get; set; }
}

和最后一个类用于创建数据库的内容并且可能存在错误

public class Kliendid
{
    public int KliendiID { get; set; }
    public string KliendiNimi { get; set; }
    public int KliendiNumber { get; set; }
    public long KliendiIsikukood { get; set; }
    public bool KliendiKliendikaart { get; set; }
    public virtual List<KliendiRendiAndmed> Kliendirendiandmed { get; set; }

}

public class KliendiRendiAndmed
{
    public int KliendiRendiAndmeteID { get; set; }
    public DateTime TulebJärgi { get; set; }
    public DateTime ToobTagasi { get; set; }

    public virtual List<KliendiRenditudVarustus> Kliendirenditudvarustus {get; set;}
}
public class KliendiRenditudVarustus
{

    public int KliendiRenditudVarustuseID { get; set; }
    public string LumeLaud { get; set; }
    public string LumeLauaSaapad { get; set; }
    public string MaeSuusk { get; set; }
    public string MaeSuusaSaapad { get; set; }
    public string SuusaKepid { get; set; }

    public virtual Kliendid Kliendid { get; set; }

}

希望有人可以帮助我欢呼新年快乐! :)

1 个答案:

答案 0 :(得分:2)

这几乎可以肯定是因为您尝试插入仅指定了名称的Kliendid,并且其中一个属性被标记为必需且不能为null。特别是在你的情况下,它几乎可以肯定是KliendiNumber或KliendiID,因为它们是整数并且不能为空,除非你使用Keys和identity列来自动递增它们。

你有几个选择。其一,您实际上可以通过捕获异常并查看验证错误属性来查看异常并查看它是哪个属性和错误。

 Catch (DbEntityValidationException ex) 
{
   foreach (var validationError in ex.EntityValidationErrors) {
       foreach (var errorDetail in validationError.ValidationErrors)
        {
           Console.WriteLine("Property: {0} Error: {1}",
            errorDetail.PropertyName, errorDetail.ErrorMessage);
          }
        }
}

您还可以更改模型以允许这两个字段上的可空整数

public int? KliendiID { get; set; }
public int? KliendiNumber { get; set; }