当我尝试理解 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长。但是,当我运行程序时,我注意到它不会显示错误,也不会剪切数据,而它将整个数字保存到数据库中。
我想知道为什么当我设置的字符串大于最大长度时它不会显示错误。
发生这种情况是因为当您创建数据库时,您没有在 OnModelCreating 方法中设置约束 .HasMaxLength(我尝试过),稍后添加它。因此,最好的选择可能是再次创建数据库,或者如果您有练习的话,您可以尝试发出 SQL ALTER TABLE 命令来修改它。