我正在構建 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()
- 1 回答
- 0 關注
- 132 瀏覽
添加回答
舉報
0/150
提交
取消