DbSet 查找始终返回 null

我正在构建 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。


尚方宝剑之说
浏览 98回答 1
1回答

炎炎设计

将哈希 url 添加到 UrlHashes DbSet 后,您需要调用.SaveChanges()以确保更改已写入数据库。string urlHash = computeService.Compute(url);//generates hash from urlDbField field = db.UrlHashes.Find(urlHash);if (field == null){&nbsp;&nbsp; &nbsp; db.UrlHashes.Add(new DbField { hash = urlHash, link = url });&nbsp; &nbsp; db.SaveChanges();&nbsp; &nbsp; return View("View1");}return View("View2");您还应该考虑使此操作异步并调用.SaveChangesAsync()
打开App,查看更多内容
随时随地看视频慕课网APP