Cur*_*uga 7 .net c# asp.net-mvc entity-framework-core asp.net-core
我是 ASP.NET Core 的新手,我正在尝试将实体插入到从简单的现有 MariaDB 数据库搭建的 Entity Framework Core 模型中。
这是实体模型:
public class ScrapeAsincroni
{
public int Id { get; set; }
public string Paese { get; set; }
public string Engine { get; set; }
public string Keywords { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是应该添加实体的控制器操作:
public JsonResult create(string paese, string engine, string keywords)
{
ScrapeAsincroni scrapeAsincrono = new ScrapeAsincroni {
Paese = paese,
Engine = engine,
Keywords = keywords
};
_context.Add(scrapeAsincrono);
try
{
_context.SaveChangesAsync();
}
catch (Exception ex)
{
return Json(new Dictionary<string, int?> { { "id", null } });
}
return Json(new Dictionary<string, int?>{ {"id", scrapeAsincrono.Id} });
}
Run Code Online (Sandbox Code Playgroud)
数据库上下文 (_context) 已在控制器的构造函数上初始化。线
_context.Add(scrapeAsincrono);
Run Code Online (Sandbox Code Playgroud)
抛出以下异常:
System.InvalidOperationException:找不到实体类型“ScrapeAsincroni”。确保实体类型已添加到模型中。
这是与该模型相关的 modelBuilder 代码
public partial class ScraperDbContext : DbContext
{
public ScraperDbContext()
{
}
public ScraperDbContext(DbContextOptions<ScraperDbContext> options)
: base(options)
{
}
public virtual DbSet<ScrapeAsincroni> ScrapeAsincroni { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings.
optionsBuilder.UseMySql("server=#.#.#.#;port=####;user=####;password=####;database=####", x => x.ServerVersion("10.3.25-mariadb"));
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ScrapeAsincroni>(entity =>
{
entity.HasComment("Informazioni su una ricerca asincrona dello Scraper");
entity.Property(e => e.Id)
.HasColumnName("id")
.HasColumnType("int(11)");
entity.Property(e => e.Engine)
.HasColumnName("engine")
.HasColumnType("varchar(255)")
.HasCharSet("utf8")
.HasCollation("utf8_general_ci");
entity.Property(e => e.Keywords)
.IsRequired()
.HasColumnName("keywords")
.HasColumnType("text")
.HasCharSet("utf8")
.HasCollation("utf8_general_ci");
entity.Property(e => e.Paese)
.HasColumnName("paese")
.HasColumnType("varchar(255)")
.HasCharSet("utf8")
.HasCollation("utf8_general_ci");
});
OnModelCreatingPartial(modelBuilder);
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}
Run Code Online (Sandbox Code Playgroud)
我似乎无法理解为什么会发生这种情况,并且在网上找不到任何解决方案。
当然,这是一个微不足道的错误,我会在第二天修复。我使用的是 DbContext 基类,而我应该使用我在搭建数据库时定义的自定义数据库上下文类。这是之前在控制器脚本中实例化上下文的方式:
private readonly DbContext _context;
public ScrapeAsincroniController(DbContext context)
{
_context = context;
}
Run Code Online (Sandbox Code Playgroud)
现在它是:
private readonly ScraperDbContext _context;
public ScrapeAsincroniController(ScraperDbContext context)
{
_context = context;
}
Run Code Online (Sandbox Code Playgroud)
我还在startup.cs中更改了这一行:
services.AddDbContext<ScraperDbContext>(options => options
.UseMySql("<your_connection_string>",
mysqlOptions => mysqlOptions.ServerVersion(new Pomelo.EntityFrameworkCore.MySql.Storage.ServerVersion(new Version(10, 3, 25), ServerType.MariaDb))
)
);
Run Code Online (Sandbox Code Playgroud)
添加
public DbSet<ScrapeAsincroni> ScrapeAsincronis { get; set; }
Run Code Online (Sandbox Code Playgroud)
在您的上下文文件中,用于将实体添加到模型中。
| 归档时间: |
|
| 查看次数: |
30867 次 |
| 最近记录: |