C# 利用HasDefaultValueSql的自动映射
在我的Entity Framework Core 2.2 API项目中,我构建了上下文。因为它表示数据库中的数据,所以我得到如下条目-C# 利用HasDefaultValueSql的自动映射,c#,automapper,.net-core-2.2,C#,Automapper,.net Core 2.2,在我的Entity Framework Core 2.2 API项目中,我构建了上下文。因为它表示数据库中的数据,所以我得到如下条目- entity.Property(e => e.Active) .IsRequired() .HasDefaultValueSql("((1))"); 其中,Active是必需的,默认值为1 我还使用AutoMapper映射实体 我的MappingEntity类- public class MappingEntity : Profile {
entity.Property(e => e.Active)
.IsRequired()
.HasDefaultValueSql("((1))");
其中,Active
是必需的,默认值为1
我还使用AutoMapper映射实体
我的MappingEntity类-
public class MappingEntity : Profile
{
public MappingEntity()
{
CreateMap<MemberUpdate, Member>();
}
}
是否有自动映射设置来保留默认值?自动映射无法保留默认值,因为它甚至不知道它存在
.HasDefaultValueSql(((1))”
是EntityFramework在构建对象时使用的设置,但在本例中,AutoMapper正在构建对象,因此信息丢失
但是,您可以做的是对映射应用一些自定义逻辑,以便在之后添加默认值。它看起来类似于以下内容:
CreateMap<MemberUpdate, Member>()
.AfterMap((memberUpdate, member) =>
member.Active = memberUpdate.Active == default(int) ? 1 : memberUpdate.Active);
尽管我怀疑这个选项对你有用,因为你想让英孚帮你处理这个问题。我建议将硬编码的1
剥离为某个常量,然后在自动映射和EF设置中使用该常量
希望能有所帮助。AutoMapper无法保留默认值,因为它甚至不知道它存在
.HasDefaultValueSql(((1))”
是EntityFramework在构建对象时使用的设置,但在本例中,AutoMapper正在构建对象,因此信息丢失
但是,您可以做的是对映射应用一些自定义逻辑,以便在之后添加默认值。它看起来类似于以下内容:
CreateMap<MemberUpdate, Member>()
.AfterMap((memberUpdate, member) =>
member.Active = memberUpdate.Active == default(int) ? 1 : memberUpdate.Active);
尽管我怀疑这个选项对你有用,因为你想让英孚帮你处理这个问题。我建议将硬编码的1
剥离为某个常量,然后在自动映射和EF设置中使用该常量
希望这能有所帮助。我可能不太清楚。该映射是否强制映射后的值?如果传入的viewmodel将其设置为不同的值会怎样?不幸的是,在没有看到您的模型的情况下,我不得不做出一些假设。其中之一是,您的传入模型实际上没有这样的属性,但似乎我错了。你能告诉我当传入的viewmodel有值时,预期的行为是什么吗?当传入的模型有该属性时,映射它。如果尚未在传入模型上设置该属性,请使用数据库defaultOk我刚刚在文章中编辑了映射代码来处理该用例。希望有帮助!我可能不太清楚。该映射是否强制映射后的值?如果传入的viewmodel将其设置为不同的值会怎样?不幸的是,在没有看到您的模型的情况下,我不得不做出一些假设。其中之一是,您的传入模型实际上没有这样的属性,但似乎我错了。你能告诉我当传入的viewmodel有值时,预期的行为是什么吗?当传入的模型有该属性时,映射它。如果尚未在传入模型上设置该属性,请使用数据库defaultOk我刚刚在文章中编辑了映射代码来处理该用例。希望有帮助!
public int Active { get; } = 1;