Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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# ASP.NET MVC Update Database命令实体验证在尝试插入带分数的十进制数时失败_C#_Asp.net_Database_Model View Controller_Package Manager Console - Fatal编程技术网

C# ASP.NET MVC Update Database命令实体验证在尝试插入带分数的十进制数时失败

C# ASP.NET MVC Update Database命令实体验证在尝试插入带分数的十进制数时失败,c#,asp.net,database,model-view-controller,package-manager-console,C#,Asp.net,Database,Model View Controller,Package Manager Console,我对ASP.NET真的很陌生,我正在处理一个问题。这个问题在标题中非常明显,我正试图解决它。以下是我试图添加到数据库中的列表成员之一: new Product { Name = "Sleep Suit", Description="For sleeping or general wear", Price=4.99m, CategoryID=categories.Single( c => c.Name == "Clothes").ID } 这是mod

我对ASP.NET真的很陌生,我正在处理一个问题。这个问题在标题中非常明显,我正试图解决它。以下是我试图添加到数据库中的列表成员之一:

new Product 
{
    Name = "Sleep Suit", 
    Description="For sleeping or general wear",
    Price=4.99m, 
    CategoryID=categories.Single( c => c.Name == "Clothes").ID 
}
这是models文件夹中的产品类:

public partial class Product
    {
        public int ID { get; set; }

        [Required(ErrorMessage = "The product name cannot be blank.")]
        [StringLength(50, MinimumLength = 3, ErrorMessage = "Please enter a product name between 3 and 50 characters in length.")]
        [RegularExpression(@"^[a-zA-Z0-9'-'\s]*$", ErrorMessage = "Please enter a product name made up of letters and numbers only.")]
        public string Name { get; set; }

        [Required(ErrorMessage = "The product description cannot be blank.")]
        [StringLength(200, MinimumLength = 10, ErrorMessage = "Please enter a product description between 10 and 200 characters in length.")]
        [RegularExpression(@"^[,;a-zA-Z0-9'-'\s]*$", ErrorMessage = "Please enter a product description made up of letters and numbers only.")]
        [DataType(DataType.MultilineText)]
        public string Description { get; set; }

        [Required(ErrorMessage = "The price cannot be blank.")]
        [Range(0.10, 10000, ErrorMessage = "Please enter a price between 0.10 and 10000.00")]
        [DataType(DataType.Currency)]
        [DisplayFormat(DataFormatString = "{0:c}")]
        [RegularExpression("^[0-9]+(\\.[0-9][0-9])?$", ErrorMessage = "The price must be a number up to two decimal places")]
        public decimal Price { get; set; }

        public int? CategoryID { get; set; }

        public virtual Category Category { get; set; }

        public virtual ICollection<ProductImageMapping> ProductImageMappings { get; set; }
    }
公共部分类乘积
{
公共int ID{get;set;}
[必需(ErrorMessage=“产品名称不能为空。”)]
[StringLength(50,MinimumLength=3,ErrorMessage=“请输入长度在3到50个字符之间的产品名称。”)]
[RegularExpression(@“^[a-zA-Z0-9'-'\s]*$”,ErrorMessage=“请输入仅由字母和数字组成的产品名称。”)]
公共字符串名称{get;set;}
[必需(ErrorMessage=“产品说明不能为空。”)]
[StringLength(200,MinimumLength=10,ErrorMessage=“请输入长度介于10到200个字符之间的产品说明。”)]
[RegularExpression(@“^[,;a-zA-Z0-9'-'\s]*$”,ErrorMessage=“请输入仅由字母和数字组成的产品说明。”)]
[数据类型(DataType.multilitext)]
公共字符串说明{get;set;}
[必需(ErrorMessage=“价格不能为空。”)]
[范围(0.10,10000,ErrorMessage=“请输入介于0.10和10000.00之间的价格”)]
[数据类型(数据类型.货币)]
[DisplayFormat(DataFormatString=“{0:c}”)]
[RegularExpression(“^[0-9]+(\\.[0-9][0-9])?$”,ErrorMessage=“价格必须是小数点后两位以内的数字”)]
公共十进制价格{get;set;}
公共int?CategoryID{get;set;}
公共虚拟类别{get;set;}
公共虚拟ICollection ProductImageMappings{get;set;}
}
当我尝试在PackageManager控制台中运行带有“updatedatabase”的seed方法时,我遇到了这个错误

System.Data.Entity.Validation.DbEntityValidationException:验证 一个或多个实体失败。请参阅“EntityValidationErrors”属性 更多细节

以下是细节:

BabyStore.Models.Product验证失败 -价格:价格必须是小数点后两位以内的数字

显然,它在检查“Price”的正则表达式时失败了,但我并没有真正输入使该表达式失败的内容。如您所见,价格声明为“4.99m”,小数点后2位。我该怎么做才能解决这个问题?我是土耳其人,所以我们用逗号而不是点来分隔小数点,所以这可能是个问题,但我真的不知道


非常感谢您的意见。

regex将成为您生存的祸根<代码>价格为双倍。因此,您将遇到IEEE浮点精度错误。同时,
双倍价格=4.90m转换为要由正则表达式验证的字符串时,很可能会转换为
4.9
。就我个人而言,我会转储正则表达式,并在进入数据库的过程中对值进行取整/截断。我建议您使用Range而不是RegularExpression属性。因为它对任何开发人员来说都更具可读性。价格是十进制的,据我所知,十进制和双精度是不同的。正则表达式是必需的,因为它也用于视觉方面。那么,在没有正则表达式的情况下,我应该如何检查输入的格式呢?那么有没有具体的方法呢?实际上,我通过将regex改为@“^\d+。?\d{0,2}$”来解决这个问题,这样数据库就被填满了。感谢您的帮助@CodeNotFound