首页 > 解决方案 > 如何将实体框架自定义字符串主键的 Id 大写

问题描述

使用 C# 和 Entity Framework Core

我创建了一个 Id 类型为字符串的实体。我希望该 Id 在实体本身中强制为大写。

我怎样才能做到这一点?

我发现此代码要添加到 DbContext 中,但它不起作用,即 foreach 不返回任何内容。

public override int SaveChanges()
{
    foreach (var entry in ChangeTracker.Entries<GLAccountCode>())
    {
        if (entry.State == EntityState.Modified || entry.State == EntityState.Added)
        {
            // Possibly check for null or if it's changed at all.
            entry.Entity.Id = entry.Entity.Id.ToUpper();
        }
    }
    return base.SaveChanges();
}

标签: entity-frameworkentity-framework-core

解决方案


您那里的代码肯定有效。我已经测试过了。所以也许问题出在你的 DbContext 的其余部分。这是我用的那个。

public class MyContext : DbContext
{
    public DbSet<GLAccountCode> GLAccountCodes { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(@"{my connection string}");
        base.OnConfiguring(optionsBuilder);
    }

    public override int SaveChanges()
    {
        foreach (var entry in ChangeTracker.Entries<GLAccountCode>())
        {
            if (entry.State == EntityState.Modified || entry.State == EntityState.Added)
            {                 
                entry.Entity.Id = entry.Entity.Id.ToUpper();
            }
        }
        return base.SaveChanges();
    }
}

请注意 DbSet 属性,您将需要该属性或OnModelCreating方法中的其他一些配置代码。


推荐阅读