回答

收藏

实体框架代码首先使列不可为空

技术问答 技术问答 639 人阅读 | 0 人回复 | 2023-09-14

我首先在我的项目中使用EF代码。我的DataModel中有以下代码
" p, y. z* r2 X: l& Q9 {+ e[HiddenInput(DisplayValue = false)]        1 t9 {& p/ k* T5 \! _: Q  S5 [
public DateTime? PasswordDate { get; set; }
* n- p1 g& h3 Q& c( ?6 N为了使该值不为空,我删除了“?” 并从“程序包管理器”控制台中运行“添加迁移”命令。以下迁移文件已生成。0 a5 ^! o: |3 c
  public partial class PasswordDate : DbMigration7 V' x* E3 v) g+ t2 N
{
7 x- a+ Y& M# Q3 S  L    public override void Up()
/ d7 Y2 K- \: @/ n( J    {1 f6 h/ z1 N" m/ y
        AlterColumn("dbo.CertificateInfoes", &quotasswordDate", c => c.DateTime(nullable: false));7 N4 ^& u- v, o6 _
    }5 ~5 ]; ]$ f! F0 `# ^) ~5 S' @
    public override void Down()
2 W. h7 r9 U7 c3 I3 V% y% r    {
+ L4 n1 g) q3 E6 D. R2 L        AlterColumn("dbo.CertificateInfoes", &quotasswordDate", c => c.DateTime());
- L8 x# K2 S+ t    }! c; w  b& L7 F# S
}
) [) O# B6 a7 r" r% M. j# F$ u但是当我运行Update-Database命令时:/ c4 q% P1 c$ Q9 R9 P) g
Update-Database -SourceMigration 201309020721215_PasswordDate
: }$ C5 T8 o2 d我收到以下错误:无法将值NULL插入表“’‘的“ PasswordDate”列中;列不允许为空。UPDATE失败。该语句已终止。) v" B/ K; M8 ]. _+ L
请提出解决方案。
3 \( `' i) q  I1 C6 G                6 X# M! V. L- L( J6 ]$ c8 l
解决方案:8 x5 A' X# h+ o& Z8 a7 j
                " R+ H$ z- n! u7 u

! i* A6 s6 s1 e/ b; G6 g6 R! T- f- f
2 i) u& G" c$ e# d6 p6 x                那是因为您允许NULL该列中的值,然后尝试使其变为非空值。随后它将尝试将现有数据迁移到该新的不可为空的列,由于您已经NULL在其中存在值,因此该列将中断。2 x! W3 Y6 f. Y
两种解决方案:4 b4 c& R! J% G8 Q. J7 Y) k0 M
1)将其更改回可为空- {. R2 K# [2 j# r" M) h: V0 J* J7 i
2)为没有值的项目为其提供默认值。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则