为了账号安全,请及时绑定邮箱和手机立即绑定

DbSet 查找始终返回 null

DbSet 查找始终返回 null

C#
尚方宝剑之说 2023-07-09 15:22:30
我正在构建 url 缩短器来提高我在 ASP.NET Core 中的技能,但在使用实体框架时遇到了问题 -方法总是从我的数据库.Find()返回。null首先,我创建了带有自定义键字段的数据库记录类public class DbField    {        [Key]        public string hash { get; set; }        public string link { get; set; }    }然后将其应用到上下文中public class UrlShorterContext : DbContext    {        public DbSet<DbField> UrlHashes { get; set; }        public UrlShorterContext(DbContextOptions<UrlShorterContext> options)            : base(options)        {            Database.EnsureCreated();        }    }ConfigureServices将上下文添加到with中的服务string connection = Configuration.GetConnectionString("DefaultConnection");services.AddDbContext<UrlShorterContext>(options => options.UseSqlServer(connection));然后将其应用到控制器中UrlShorterContext db;public HomeController(UrlShorterContext context){      db = context;}public IActionResult Index(string url,[FromServices] IComputeHash computeService)        {            string urlHash = computeService.Compute(url);//generates hash from url            DbField field = db.UrlHashes.Find(urlHash);            if (field == null)            {                 db.UrlHashes.Add(new DbField { hash = urlHash, link = url });                return View("View1");            }            return View("View2");...第一次运行时,数据库为空,操作获取 url,对其进行哈希处理,将其添加到数据库并返回“View1”。.Find()在使用相同 url 的第二次运行中,必须在方法中找到它,field必须为其分配值,并且必须返回“View2”。但以某种方式field获得 的价值null。
查看完整描述

1 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

将哈希 url 添加到 UrlHashes DbSet 后,您需要调用.SaveChanges()以确保更改已写入数据库。


string urlHash = computeService.Compute(url);//generates hash from url

DbField field = db.UrlHashes.Find(urlHash);


if (field == null)

    db.UrlHashes.Add(new DbField { hash = urlHash, link = url });

    db.SaveChanges();

    return View("View1");

}


return View("View2");

您还应该考虑使此操作异步并调用.SaveChangesAsync()


查看完整回答
反对 回复 2023-07-09
  • 1 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信