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