【问题标题】:An unhandled exception of type 'System.Data.Entity...ModelValidationException' occurred in EntityFramework.dllEntityFramework.dll 中出现“System.Data.Entity...ModelValidationException”类型的未处理异常
【发布时间】:2015-01-02 01:52:45
【问题描述】:

所以我遇到了这个错误:

未处理的类型异常 '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; }

}

希望有人能帮助我,祝大家新年快乐! :)

【问题讨论】:

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


    【解决方案1】:

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

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

     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);
              }
            }
    }
    

    您还可以更改模型以允许在这 2 个字段上使用可为空的整数

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多