我正在构建 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。
炎炎设计
相关分类