附加到 Entity Framework Core 中固定长度属性的尾随空格

问题描述 投票:0回答:1

我在 .NET 8 应用程序中遇到一个问题,当存储在数据库中时,尾随空格被附加到固定长度属性 (UserName)。我正在使用数据库提供程序 - Microsoft.EntityFrameworkCore.SqlServer。 我使用 Microsoft.AspNetCore.Identity.EntityFrameworkCore 进行身份存储,其中自定义类继承自身份类。我已按如下方式配置该属性:

public class UserConfiguration : IEntityTypeConfiguration<User>
{
    public void Configure(EntityTypeBuilder<User> entity)
    {
        entity.Property(u => u.UserName)
        .HasMaxLength(50)
        .IsRequired();

但是,在播种过程中,当我创建一个 UserName = "username" 的新 User 对象时,它在数据库中存储为: “用户名(空格直到 50 个字符)” -> 请注意,序列有 50 个字符,它在用户名后面跟随空格,直到达到 50 个字符(由于 SO 的格式,在此处的字符串中无法准确看到)

用户类别:

public class User : IdentityUser<int>
{
// ... UserName inherited from IdentityUser ...

用户配置:

public class UserConfiguration : IEntityTypeConfiguration<User>
{
    public void Configure(EntityTypeBuilder<User> entity)
    {
    entity.Property(u => u.UserName)
        .HasMaxLength(50)
        .IsRequired();

    // ... other configurations ...
}
}

播种逻辑:

var admin = new User
{
Id = 1,
FirstName = "John",
LastName = "Doe",
UserName = "username", // No trailing whitespaces here
Email = "[email protected]",
// ... other properties ...
};
modelBuilder.Entity<User>().HasData(users);

上下文类:

public class LibraryContext : IdentityDbContext<User, Role, int>
{
    public virtual DbSet<User> Users { get; set; }

我认为它必须与自定义配置和身份配置有关。 请注意,我已尝试删除自定义 UserName 属性配置并将其留给 Identity 自行配置,但问题仍然存在。 即使 UserName 属性配置为 .HasMaxLength(50),为什么尾随空格仍会附加到该属性? 如何确保存储的 UserName 属性没有任何尾随空格?

任何见解或建议将不胜感激。谢谢!

c# asp.net-core .net-core entity-framework-core asp.net-identity
1个回答
0
投票

生成的创建用户表脚本:

USE [LibApp]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[User](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [CreatedDateTime] [datetime2](7) NOT NULL,
    [ModifiedDateTime] [datetime2](7) NOT NULL,
    [CreatedByUserId] [int] NOT NULL,
    [ModifiedByUserId] [int] NOT NULL,
    [IsActive] [bit] NOT NULL,
    [Address] [nvarchar](100) NULL,
    [CardCode] [nvarchar](max) NULL,
    [City] [nvarchar](50) NOT NULL,
    [Currency] [char](3) NULL,
    [DateOfBirth] [datetime2](7) NOT NULL,
    [Email] [varchar](50) NOT NULL,
    [FirstName] [nvarchar](50) NOT NULL,
    [ImagePath] [char](255) NULL,
    [IsCardActive] [bit] NOT NULL,
    [LastLoginDateTime] [datetime2](7) NULL,
    [LastName] [nvarchar](50) NOT NULL,
    [Notes] [nvarchar](1000) NULL,
    [PhoneNumber] [nvarchar](30) NULL,
    [RoleId] [int] NOT NULL,
    [TotalFee] [decimal](10, 2) NOT NULL,
    [UserName] [varchar](50) NOT NULL,
    [AccessFailedCount] [int] NOT NULL,
    [ConcurrencyStamp] [nvarchar](max) NULL,
    [EmailConfirmed] [bit] NOT NULL,
    [LockoutEnabled] [bit] NOT NULL,
    [LockoutEnd] [datetimeoffset](7) NULL,
    [NormalizedEmail] [nvarchar](256) NULL,
    [NormalizedUserName] [nvarchar](256) NULL,
    [PasswordHash] [nvarchar](max) NULL,
    [PhoneNumberConfirmed] [bit] NOT NULL,
    [SecurityStamp] [nvarchar](max) NULL,
    [TwoFactorEnabled] [bit] NOT NULL,
    [DocumentId] [nvarchar](13) NOT NULL,
 CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO



ALTER TABLE [dbo].[User] ADD  DEFAULT (N'') FOR [DocumentId]
GO

ALTER TABLE [dbo].[User]  WITH CHECK ADD  CONSTRAINT [FK_User_Role_RoleId] FOREIGN KEY([RoleId])
REFERENCES [dbo].[Role] ([Id])
GO

ALTER TABLE [dbo].[User] CHECK CONSTRAINT [FK_User_Role_RoleId]
GO

ALTER TABLE [dbo].[User]  WITH CHECK ADD  CONSTRAINT [FK_User_User_CreatedByUserId] FOREIGN KEY([CreatedByUserId])
REFERENCES [dbo].[User] ([Id])
GO

ALTER TABLE [dbo].[User] CHECK CONSTRAINT [FK_User_User_CreatedByUserId]
GO

ALTER TABLE [dbo].[User]  WITH CHECK ADD  CONSTRAINT [FK_User_User_ModifiedByUserId] FOREIGN KEY([ModifiedByUserId])
REFERENCES [dbo].[User] ([Id])
GO

ALTER TABLE [dbo].[User] CHECK CONSTRAINT [FK_User_User_ModifiedByUserId]
GO
© www.soinside.com 2019 - 2024. All rights reserved.