实体的框架,错误在提交空领域
-
21-09-2019 - |
题
VS2010Beta2,.净4.
我ASP.NET 视2应用,当时我提交一份形式为一项行动方法,接受对象创造的实体的框架,我得到的以下错误:
Exception Details: System.Data.ConstraintException: This property cannot be set to a
null value.
Source Error:
Line 4500: OnTextChanging(value);
Line 4501: ReportPropertyChanging("Text");
Line 4502: _Text = StructuralObject.SetValidValue(value, false);
Line 4503: ReportPropertyChanged("Text");
Line 4504: OnTextChanged();
财产被称为"文字"和类型"的文本不NULL"MS SQL2008年。
我的行动将检查,如果价值是nullorempty,如果是,一种模式的错误将会增加,但我得到了错误后尽快提交形式。
解决方案
你是结合直接的实体?看起来喜欢它。这样你有两个选择:
- 编写定制的模式粘合剂意null->empty string.
- 结合到一个编辑模型,它允许空,然后改变这种空串在复制本价值观的实体的行动。
我会选择#2,个人。我认为你应该随时使用查/编辑模式,这是一个很好的例子为什么。
其他提示
我有同样的问题。我环顾四周,发现工作在这里。它描述了问题,通过采取地方必填字段验证之前的EF验证所引起。这也显示了我们如何可以使用[DisplayFormat]
标签解决此问题。希望这会帮助你。
这里的链接的问题和解决方法:
这是与MVC2和Entity Framework 4的问题,或者是这样的设计?似乎EF属性的该验证工作正常的数值与字符串字段是工作日期时间不可为空的(必需的)的字段和数据类型的验证,而不必使用的ViewModels。
我使用一个单一的,不可为空的varchar用一个简单的表FOOBAR使用重新产生的问题(50)的列称为barName在SLQ 2008我生成从该数据库的EF模型和快速加入的控制器和用于一个CREATE VIEW FOOBAR实体。如果我尝试发布到创建操作,而不进入该属性barName的值,VS步入模型(就像上面的那个)的designer.cs文件中的一个例外。当我尝试一步过去例外,验证消息显示了形式和领域的粉红色突出显示。
好像自己是不是在正确的顺序射击。因为VS步入HTTPPOST CREATE方法之前发生异常。
我发现从ASP.Net MvcMusicStore样品有用的代码。 http://mvcmusicstore.codeplex.com/releases/view/44445#DownloadId= 119336
似乎结合视图模型修复该问题。
namespace MvcMusicStore.ViewModels
{
public class StoreManagerViewModel
{
public Album Album { get; set; }
public List<Artist> Artists { get; set; }
public List<Genre> Genres { get; set; }
}
}
........
namespace MvcMusicStore.Models
{
[MetadataType(typeof(AlbumMetaData))]
public partial class Album
{
// Validation rules for the Album class
[Bind(Exclude = "AlbumId")]
public class AlbumMetaData
{
[ScaffoldColumn(false)]
public object AlbumId { get; set; }
[DisplayName("Genre")]
public object GenreId { get; set; }
[DisplayName("Artist")]
public object ArtistId { get; set; }
[Required(ErrorMessage = "An Album Title is required")]
[StringLength(160)]
public object Title { get; set; }
[DisplayName("Album Art URL")]
[StringLength(1024)]
public object AlbumArtUrl { get; set; }
[Required(ErrorMessage = "Price is required")]
[Range(0.01, 100.00, ErrorMessage="Price must be between 0.01 and 100.00")]
public object Price { get; set; }
}
}
}
阿希什释迦的回答帮助了我。我加入这个属性的财产,现在它的工作原理。
[DisplayFormat(ConvertEmptyStringToNull = false, NullDisplayText="")]
因此,它看起来像这样:
[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
[DataMemberAttribute()]
[DisplayFormat(ConvertEmptyStringToNull = false, NullDisplayText="")]
public global::System.String MyProperty
{
get
{
return _MyProperty;
}
set
{
OnMyPropertyChanging(value);
ReportPropertyChanging("MyProperty");
_MyProperty = StructuralObject.SetValidValue(value, false);
ReportPropertyChanged("MyProperty");
OnMyPropertyChanged();
}
}
导入名称空间:
using System.ComponentModel.DataAnnotations;
和添加属性属性[Required]
[Required]
public global::System.String MyProperty
{
get
{
return _MyProperty;
}
set
{
OnMyPropertyChanging(value);
ReportPropertyChanging("MyProperty");
_MyProperty = StructuralObject.SetValidValue(value, false);
ReportPropertyChanged("MyProperty");
OnMyPropertyChanged();
}
}
因此ModelState.IsValid等于false,示出了在验证错误消息,并用空的服务器上也不会失败。
我有同样的问题,并通过使false
到true
这样固定的:
Line 4502:
_Text = StructuralObject.SetValidValue(value, false);
我刚刚有同样的问题我自己,而来到这里找到解决方案。然而,答案可以被增强。
Svavar的和HackITMngr在正确的轨道上,但是结合两种给出了最好的结果。你不想去装饰生成的类,因为你在冒险失去修改您的自定义更改EF模型。
[MetadataType(typeof运算(MyTableMetaData))] 公共部分类的MyTable { //验证规则Album类
public class MyTableMetaData
{
[DisplayFormat(ConvertEmptyStringToNull = false, NullDisplayText="")]
public string MyTextProperty { get; set; }
}
}
要解决这两者之间的任何参数。我想说Svavar的是直接的答案,HackITMngr是增强。
对我的作品太棒了!
我设置StoreGeneratedPattern属性作为计算每个字段和它解决了这个问题,我