C# 实体框架代码第一个MaxLength和FixedLegth(char与varchar)
我有一个从现有数据库创建的实体框架CodeFirst模型,我想使用DataAnnotation以不同的方式装饰一些char和varchar char和varchar的区别在于char具有固定长度,而varchar具有可变长度C# 实体框架代码第一个MaxLength和FixedLegth(char与varchar),c#,mysql,entity-framework-6,code-first,C#,Mysql,Entity Framework 6,Code First,我有一个从现有数据库创建的实体框架CodeFirst模型,我想使用DataAnnotation以不同的方式装饰一些char和varchar char和varchar的区别在于char具有固定长度,而varchar具有可变长度 对于Varchar,我使用[Maxlength(length)]作为char,这是正确的方法还是有更好的方法来定义类中的字符串属性映射为数据库中的char?使用fluent api,您可以使用IsFixedLength() [StringLength]在此处不正确。应该是[
对于Varchar,我使用[Maxlength(length)]作为char,这是正确的方法还是有更好的方法来定义类中的字符串属性映射为数据库中的char?使用fluent api,您可以使用IsFixedLength()
[StringLength]
在此处不正确。应该是[MaxLength]
,这是服务器端验证。请参阅本帖:and@AaronHudon这些注释将在OP请求的数据库中创建一个固定长度的CHAR(2)字段。它还有客户端验证的额外好处。请参阅链接中马特·约翰逊的评论。我也可以证明它对我们有效。@AaronHudon@SteveGreene重要的是你有[Column(TypeName=“char”)]
或[Column(TypeName=“binary”)]
。如果不显式指定,EF将默认为可变长度类型。如果将类型指定为固定长度类型,则它将使用MaxLength()
或StringLength()
作为固定长度。所以你们俩都是对的。
//Set StudentName column size to 50 and change datatype to nchar
//IsFixedLength() change datatype from nvarchar to nchar
modelBuilder.Entity<Student>()
.Property(p => p.StudentName)
.HasMaxLength(50).IsFixedLength();
[Column(TypeName = "char")]
[StringLength(2)]
public string MyCharField { get; set; }