![](/img/trans.png)
[英]Error: System.InvalidOperationException in ASP.NET WebAPI
[英]ASP.Net error System.InvalidOperationException
我正在尝试制作可以管理客户的应用程序。 所以我创建了数据库和表 tecnici,我可以在其中插入我所有的技术人员。
在我创建表clienti
来插入我的客户之前,所有 CRUD 操作都有效。 我制作了 controller、model 并查看了clienti
,当我运行应用程序时它给了我这个错误System.InvalidOperationException: '实体类型'Cliente'需要定义一个主键。 如果您打算使用无密钥实体类型,请调用“HasNoKey()”。
ClientiController中的错误,当我尝试在 TecniciController 中加载所有客户端 ftom table clienti
errore时,它给了我同样的错误
这是 ClientiController 的代码
public class ClientiController: Controller
{
private readonly AppDbContext _db;
public ClientiController(AppDbContext db)
{
_db = db;
}
public IActionResult Index()
{
var datiClienti = _db.tboClienti.ToList();
return View(datiClienti);
}
public IActionResult CreareCliente()
{
return View();
}
[HttpPost]
public async Task<IActionResult> CreareCliente(Cliente cliente)
{
if (ModelState.IsValid)
{
_db.Add(cliente);
await _db.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(cliente);
}
}
这是 model 客户
public class Cliente
{
[Required(ErrorMessage = "Inserisci il nome di proprietario della azienda")]
[Display(Name = "Nome")]
public string Nome { get; set; }
[Required(ErrorMessage = "Inserisci il cognome di proprietario della azienda")]
[Display(Name = "Cognome")]
public string Cognome { get; set; }
[Display(Name = "Azienda")]
public string Nome_azienda { get; set; }
[Required(ErrorMessage = "Inserisci numero cellulare della Azienda")]
[DataType(DataType.PhoneNumber)]
[Display(Name = "Telefono")]
[RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$",
ErrorMessage = "Numero non valido")]
public string Cellulare { get; set; }
}
我将连接字符串放入appsettings.json
这是我配置数据库的地方:
public class AppDbContext: DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options): base (options)
{
}
public DbSet<Tecnico> tboTecnici { get; set; }
public DbSet<Cliente> tboClienti { get; set; }
}
直到只有一张桌子(桌子: tecnici
)它没有给我带来问题。 当我创建 controller model 并查看表 tboClienti 时,它给了我错误。
任何建议如何解决这个问题。 提前致谢!
尝试在客户端 class 中定义主键。
[Key]
public int Id { get; set; }
正如异常文本所说,您必须定义主键或明确表示该表没有主键。
我建议你做一个像
[Key]
public int Id { get; set; }
或使用 Guid 而不是 integer - 其优点是可以在保存之前生成 Guid,但它的可读性不如数字 - 如您所愿。
[Key]
public Guid Id { get; set; }
您应该指定列Id
是您的主键,并指定由 SQL 服务器自动递增
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
这样,一旦您将实体保存到数据库中, Id
将自动填充新生成的值
如果您遇到此错误并且 [Key] 属性没有解决问题。
您可以尝试包括列顺序功能。 这解决了无键定义错误的 EntityType。
[Key]
[Column(Order = 1)]
public int Id { get; set; }
在 Model Class 中包含System.ComponentModel.DataAnnotations
命名空间。
key
需要是财产和公共。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.