创建比预期长的字符串时,EF OnModelCreating 中的HasMaxLength 不会显示错误

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

当我尝试理解 EF 中的

OnModelCreating
时,我注意到 Microsoft learn 上有一个示例,并且这个网站说:

HasMaxLength 方法应用于属性,以指定该属性应映射到的列的最大字符数或字节数。

在这种情况下,我使用以下代码来尝试弄清楚如果我创建的字符串大于最大长度,它会做什么:

namespace test
{
    internal class MyContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(@"Data Source=(localdb)\MSSqlLocalDB;AttachDbFilename=C:\Users\XXXXX\Blogs.mdf;Integrated Security=True");
        }
        #region Required
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Blog>()
                .Property(b => b.Url)
                .HasMaxLength(5);
        }
        #endregion
    }

    public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }
    }

这是主要方法:

    static void Main(string[] args)
    {
        using (var a = new test.MyContext())
        {
            var b = new test.Blog() {Url="1234567890" };
            a.Add(b);
            //a.Database.EnsureCreated();
            a.SaveChanges();
        }
    }
}

我将

HasMaxLength
设置为5,字符串是
123467890
,它比5长。但是,当我运行程序时,我注意到它不会显示错误,也不会剪切数据,而它将整个数字保存到数据库中。

我想知道为什么当我设置的字符串大于最大长度时它不会显示错误。

c# entity-framework
1个回答
0
投票

发生这种情况是因为当您创建数据库时,您没有在 OnModelCreating 方法中设置约束 .HasMaxLength(我尝试过),稍后添加它。因此,最好的选择可能是再次创建数据库,或者如果您有练习的话,您可以尝试发出 SQL ALTER TABLE 命令来修改它。

© www.soinside.com 2019 - 2024. All rights reserved.