繁体   English   中英

ASP.Net 错误 System.InvalidOperationException

[英]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 时,它给了我错误。

这是表 tboClienti

这是 tboTecnici

任何建议如何解决这个问题。 提前致谢!

尝试在客户端 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM