Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体的验证失败。见';实体验证错误';财产_C#_Entity Framework - Fatal编程技术网

C# 实体的验证失败。见';实体验证错误';财产

C# 实体的验证失败。见';实体验证错误';财产,c#,entity-framework,C#,Entity Framework,我正在从链接创建应用程序。以下是我的DatabaseInitializer.cs类: private static List<Product> GetProducts() { var products = new List<Product>{ new Product { ProductID = 1, ProductName="HTC",

我正在从链接创建应用程序。以下是我的
DatabaseInitializer.cs
类:

private static List<Product> GetProducts()
    {
        var products = new List<Product>{
            new Product
            {
                ProductID = 1,
                ProductName="HTC",
                ProductDescription="HTC Mobiles are very nice",
                ImagePath="htc.jpg",
                UnitPrice=25000,
                CategoryID=1
            },
            new Product
            {
                ProductID = 2,
                ProductName="Nokia",
                ProductDescription="Mokia Lumia Mobiles are very smart",
                ImagePath="nokia.jpg",
                UnitPrice=30000,
                CategoryID=1
            },
            new Product
            {
                ProductID = 3,
                ProductName="Samsung",
                ProductDescription="Samdung Mobiles are very great",
                ImagePath="samsung.jpg",
                UnitPrice=20000,
                CategoryID=1
            },
            new Product
            {
                ProductID = 4,
                ProductName="Apple",
                ProductDescription="Apple Laptops are very superb",
                ImagePath="apple.jpg",
                UnitPrice=80000,
                CategoryID=2
            },
            new Product
            {
                ProductID = 5,
                ProductName="Dell",
                ProductDescription="Dell Laptops are very nice",
                ImagePath="dell.jpg",
                UnitPrice=45000,
                CategoryID=2
            },
            new Product
            {
                ProductID = 6,
                ProductName="Lenovo",
                ProductDescription="Lenovo Laptops are very great",
                ImagePath="lenovo.jpg",
                UnitPrice=50000,
                CategoryID=2
            },
            new Product
            {
                ProductID = 7,
                ProductName="Cannon",
                ProductDescription="Cannon Cameras are very nice",
                ImagePath="cannon.jpg",
                UnitPrice=25000,
                CategoryID=3
            },
            new Product
            {
                ProductID = 8,
                ProductName="Nikon",
                ProductDescription="Nikon Cameras are superb",
                ImagePath="nikon.jpg",
                UnitPrice=35000,
                CategoryID=3
            },
            new Product
            {
                ProductID = 9,
                ProductName="Sony",
                ProductDescription="Sony Cameras are very great",
                ImagePath="sony.jpg",
                UnitPrice=40000,
                CategoryID=3
            },
            new Product
            {
                ProductID = 10,
                ProductName="Creative",
                ProductDescription="Creative Speakers are very nice",
                ImagePath="creative.jpg",
                UnitPrice=25000,
                CategoryID=4
            },
            new Product
            {
                ProductID = 11,
                ProductName="Jbl",
                ProductDescription="Jbl Speakers are great",
                ImagePath="jbl.jpg",
                UnitPrice=45000,
                CategoryID=4
            },
            new Product
            {
                ProductID = 12,
                ProductName="Philips",
                ProductDescription="Philips Speakers are awesome",
                ImagePath="philips.jpg",
                UnitPrice=35000,
                CategoryID=4
            },
        };
        return products;
    }
private static List GetProducts()
{
var产品=新列表{
新产品
{
ProductID=1,
ProductName=“HTC”,
ProductDescription=“HTC手机非常好”,
ImagePath=“htc.jpg”,
单价=25000,
类别ID=1
},
新产品
{
ProductID=2,
ProductName=“诺基亚”,
ProductDescription=“Mokia Lumia Mobiles非常智能”,
ImagePath=“nokia.jpg”,
单价=30000,
类别ID=1
},
新产品
{
ProductID=3,
ProductName=“三星”,
ProductDescription=“Samdung手机非常棒”,
ImagePath=“samsung.jpg”,
单价=20000,
类别ID=1
},
新产品
{
ProductID=4,
ProductName=“苹果”,
ProductDescription=“苹果笔记本电脑非常出色”,
ImagePath=“apple.jpg”,
单价=80000,
类别ID=2
},
新产品
{
ProductID=5,
ProductName=“戴尔”,
ProductDescription=“戴尔笔记本电脑非常好”,
ImagePath=“dell.jpg”,
单价=45000,
类别ID=2
},
新产品
{
ProductID=6,
ProductName=“联想”,
ProductDescription=“联想笔记本电脑非常棒”,
ImagePath=“lenovo.jpg”,
单价=50000,
类别ID=2
},
新产品
{
ProductID=7,
ProductName=“Cannon”,
ProductDescription=“Cannon摄像头非常漂亮”,
ImagePath=“cannon.jpg”,
单价=25000,
类别ID=3
},
新产品
{
ProductID=8,
ProductName=“尼康”,
ProductDescription=“尼康摄像头非常出色”,
ImagePath=“nikon.jpg”,
单价=35000,
类别ID=3
},
新产品
{
ProductID=9,
ProductName=“索尼”,
ProductDescription=“索尼相机非常棒”,
ImagePath=“sony.jpg”,
单价=40000,
类别ID=3
},
新产品
{
ProductID=10,
ProductName=“创造性”,
ProductDescription=“创意演讲者非常好”,
ImagePath=“creative.jpg”,
单价=25000,
类别ID=4
},
新产品
{
ProductID=11,
ProductName=“Jbl”,
ProductDescription=“Jbl扬声器很棒”,
ImagePath=“jbl.jpg”,
单价=45000,
类别ID=4
},
新产品
{
ProductID=12,
ProductName=“飞利浦”,
ProductDescription=“飞利浦扬声器棒极了”,
ImagePath=“philips.jpg”,
单价=35000,
类别ID=4
},
};
退货产品;
}
现在我必须更改图像条目。我必须插入png图像。为此,我启用了dbcontext类的迁移。然后在Configuration.cs类中,我插入了以下代码:

 protected override void Seed(SamplePayPalApp.Models.ProductDbContext context)
    {
        var New_Products = new List<Product>
        {

          new Product{ImagePath="htc.png"},
          new Product{ImagePath="nokia.png"},
          new Product{ImagePath="samsung.png"},
          new Product{ImagePath="apple.png"},
          new Product{ImagePath="dell.png"},
          new Product{ImagePath="lenovo.png"},
          new Product{ImagePath="cannon.png"},
          new Product{ImagePath="nikon.png"},
          new Product{ImagePath="sony.png"},
          new Product{ImagePath="creative.png"},
          new Product{ImagePath="jbl.png"},
          new Product{ImagePath="philips.png"},
       };

        New_Products.ForEach(np => context.Products.AddOrUpdate(p => p.ImagePath, np));
        context.SaveChanges();
    }
protected override void Seed(samplepayplapp.Models.ProductDbContext)
{
var新产品=新列表
{
新产品{ImagePath=“htc.png”},
新产品{ImagePath=“nokia.png”},
新产品{ImagePath=“samsung.png”},
新产品{ImagePath=“apple.png”},
新产品{ImagePath=“dell.png”},
新产品{ImagePath=“lenovo.png”},
新产品{ImagePath=“cannon.png”},
新产品{ImagePath=“nikon.png”},
新产品{ImagePath=“sony.png”},
新产品{ImagePath=“creative.png”},
新产品{ImagePath=“jbl.png”},
新产品{ImagePath=“philips.png”},
};
New_Products.ForEach(np=>context.Products.AddOrUpdate(p=>p.ImagePath,np));
SaveChanges();
}
现在,当我在
软件包管理器控制台中运行
更新数据库
命令时,出现以下错误:


一般来说,这意味着您违反了一个或多个db约束,例如非空列或超过了字符串列的最大长度等。因此,为了查看您遇到的错误类型,您可以在保存更改时尝试以下操作:

try
{
    context.SaveChanges();
}
catch(Exception ex)
{
    try
        {
            foreach (var eve in ((DbEntityValidationException)ex).EntityValidationErrors)
            {
                Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                    eve.Entry.Entity.GetType().Name, eve.Entry.State);
                foreach (var ve in eve.ValidationErrors)
                {
                    Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                        ve.PropertyName, ve.ErrorMessage);
                }
            }
        }
        catch
        {
        }

    }
}

这篇文章可能不会直接回答您的案例,但将其添加到您的代码中会显示您的案例发生了什么。

Product.cs model entity有两个字段,其中数据注释为[Required]。由于您尚未在试图添加或更新的对象中定义这些值(它们为null),因此它会抛出EntityValidationException

如果不需要注释,请删除注释,或者在种子方法中添加值。这应该可以解决问题


您还可以使用该技术要求按照注释中建议的jyparask附加调试器。它可以放在种子方法的顶部,也可以放在种子方法之前调用的任何其他方法的顶部

尝试在种子方法上添加产品ID?@AndreiDvoynos Noth