gpt4 book ai didi

c# - EntityFramework Core 2 默认值

转载 作者:行者123 更新时间:2023-12-03 12:26:28 24 4
gpt4 key购买 nike

我试图在我的几个 EF 模型上使用默认值,我注意到要么我误解了 HasDefaultValue 行为,要么它没有按预期工作。

我有下表和支持模型

CREATE TABLE [dbo].[packages]
(
[Scnumber] BIGINT NOT NULL,
[PU] INT NOT NULL,
[State] SMALLINT NOT NULL DEFAULT 0,
[Status] [smallint] NOT NULL,
[Created] DATETIME NOT NULL DEFAULT GETDATE(),
CONSTRAINT [PK_packages] PRIMARY KEY CLUSTERED ([Scnumber] ASC) ON [PRIMARY],
)

[Table("packages", Schema = "dbo")]
public class Package
{
[Key]
[Column(TypeName = "bigint")]
public long Scnumber { get; set; }

[Column]
[Required]
public int PU { get; set; }

[Column(TypeName = "smallint")]
[Required]
public PackageStatus Status { get; set; }

[Column(TypeName = "tinyint")]
public RecordState State { get; set; }

[Column]
public DateTime? Created { get; set; }
}

为了应用默认值,我的 OnModelCreating() 中还包含以下内容
modelBuilder.Entity<Package>(entity =>
{
entity.Property(r => r.State)
.HasDefaultValue(RecordState.Active);

entity.Property(r => r.Created)
.HasDefaultValue(DateTime.Now);
});

当我尝试保存新对象时,出现以下异常:

SqlException: Cannot insert the value NULL into column 'State', table 'app.dbo.packages'; column does not allow nulls. INSERT fails.



这很令人困惑,好像我在保存对象之前检查了它,它有一个默认值,但我得到了这个异常。我知道最简单的解决方案是简单地确保在创建对象时设置 state 的值,但这种方式违背了 HasDefaultValue 的目的。

- 编辑 -

当我尝试添加新对象时,我会执行以下操作
var package = new Package { Scnumber = 0123456718, PU = 1001 };

_context.Packages.Add(region);
_context.SaveChanges();

没有什么不合常理的,但失败了,但是如果我运行以下命令,它会起作用
var package = new Package {Scnumber = 0123456718, PU = 1001, Status = PackageStatus.Rejected, State = RecordState.Staging, Created = DateTime.Now };

_context.Packages.Add(region);
_context.SaveChanges();

public enum PackageStatus : short
{
New,
PendingValidation,
CheckedOut,
Approved,
Rejected,
PendingRender,
Rendered,
RenderFailed,
PendingPrint,
Printed,
PrintFailed,
Cancelled,
PendingDownload,
Downloaded,
DownloadError,
SystemUpdated,
}

public enum RecordState : byte
{
Active,
Deleted,
Staging,
}

最佳答案

我有一个 .HasDefaultValueSql("((0))")在我当前的项目中工作。

还找到了 .HasDefaultValueSql("getdate()").HasDefaultValue(3); here .

关于c# - EntityFramework Core 2 默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48460845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com