ASP. Net ошибка System.InvalidOperationException - PullRequest
1 голос
/ 16 июня 2020

Я пытаюсь создать приложение, в котором я могу управлять клиентами. Итак, я создал базу данных и таблицу tecnici, куда я могу вставить всех своих технических специалистов.

Все операции CRUD работали, пока я не создал таблицу clienti для вставки моих клиентов. Я создал контроллер, модель и представление для clienti, и когда я запускаю приложение, оно выдает мне эту ошибку System.InvalidOperationException: «Тип объекта« Клиент »требует определения первичного ключа. Если вы намеревались использовать тип сущности без ключа, вызовите 'HasNoKey ()'. '

Ошибка в ClientiController и выдает ту же ошибку, когда я пытаюсь загрузить всех клиентов ftom таблица clienti ошибка в TecniciController

Это код для 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);
        }
    }

Это модель Cliente

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

И это класс, в котором я настраиваю db:

public class AppDbContext: DbContext
    {
        public AppDbContext(DbContextOptions<AppDbContext> options): base (options)
        {

        }

        public DbSet<Tecnico> tboTecnici { get; set; }
        public DbSet<Cliente> tboClienti { get; set; }
    }

Пока была только одна таблица (таблица: tecnici), это не доставляло мне проблем. Когда я создаю модель контроллера и просматриваю таблицу tboClienti, это дает мне ошибку.

Это таблица tboClienti

А это tboTecnici

Есть предложения, как это исправить. Заранее спасибо!

Ответы [ 4 ]

1 голос
/ 16 июня 2020

Как говорится в тексте исключения, вам необходимо определить первичный ключ или явно указать, что эта таблица не имеет первичного ключа.

Я предлагаю вам создать такой ключ, как

[Key]
public int Id { get; set; }

или с Guid вместо целого числа - это имеет то преимущество, что Guids можно сгенерировать перед сохранением, но он менее читабелен, чем число - как вы хотите.

[Key]
public Guid Id { get; set; }
1 голос
/ 16 июня 2020

Вы должны указать, что столбец Id является вашим первичным ключом, а также указать, что он автоматически увеличивается SQL сервером

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

Таким образом, как только вы сохраните свою сущность в базе данных, Id будет автоматически заполнено новым сгенерированным значением

1 голос
/ 16 июня 2020

Попробуйте определить первичный ключ в своем классе клиента.

[Key]
public int Id { get; set; }
0 голосов
/ 16 июня 2020

Если вы столкнулись с этой ошибкой и атрибут [Key] не решил проблему.

Вы можете попробовать включить функцию порядка столбцов. Это решает EntityType с ошибками, определяющими отсутствие ключа.

[Key]
[Column(Order = 1)]
public int Id { get; set; } 

Включите пространство имен System.ComponentModel.DataAnnotations в свой класс модели.

key должен быть свойством, а publi c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...