Kontroler:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcApplication1.Models;
using System.ComponentModel.DataAnnotations.Schema;
namespace MvcApplication1.Controllers
{
public class studentsController : Controller
{
//
// GET: /students/
public ActionResult details()
{
int id = 16;
studentContext std = new studentContext();
student first = std.details.Single(m => m.RollNo == id);
return View(first);
}
}
}
Model DbContext:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
namespace MvcApplication1.Models
{
public class studentContext : DbContext
{
public DbSet<student> details { get; set; }
}
}
Model:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;
namespace MvcApplication1.Models
{
[Table("studentdetails")]
public class student
{
public int RollNo;
public string Name;
public string Stream;
public string Div;
}
}
Tabela bazy danych:
CREATE TABLE [dbo].[studentdetails](
[RollNo] [int] NULL,
[Name] [nvarchar](50) NULL,
[Stream] [nvarchar](50) NULL,
[Div] [nvarchar](50) NULL
)
W global.asax.cs
Database.SetInitializer<MvcApplication1.Models.studentContext>(null);
Powyższy kod zawiera listę wszystkich klas, nad którymi pracuję. Po uruchomieniu mojej aplikacji pojawia się błąd:
„Podczas generowania modelu wykryto jeden lub więcej błędów walidacji” oraz „Typ jednostki nie ma zdefiniowanego klucza”.
c#
.net
entity-framework
Koder
źródło
źródło
Odpowiedzi:
Klasę Model należy zmienić na:
źródło
[Key]
), dopóki nie zmienię typów danych (zmieniłem je naunsigned
) i działa tylko bajt. Czy jest powód, dla którego nie mogę używaćunsigned
wartości?Upewnij się, że publiczni członkowie klasy uczniów są zdefiniowani jako właściwości w /
{get; set;}
(twoje są zmiennymi publicznymi - częsty błąd).Umieść
[Key]
adnotację na wybranej nieruchomości.źródło
Może się tak zdarzyć z kilku powodów. Niektóre z nich znalazłem tutaj , inne odkryłem samodzielnie.
Id
, musisz dodać[Key]
do niej atrybut.public
uint
,ulong
itd. Nie są akceptowane.źródło
private set
z niektórych nieruchomości podczas czyszczenia. Wynik był taki, że „EntityType nie ma zdefiniowanego błędu klucza”. Dlatego uważaj na narzędzia czyszczące, które usuwają niezbędny kod.ID
,Id
,ClassNameID
,ClassNameId
nie musisz użyć[Key] attribute
Wiem, że ten post jest spóźniony, ale to rozwiązanie pomogło mi:
dodane [Kolumna (Kolejność = 0)] po [Klucz] można dodać z przyrostem o 1:
itp...
źródło
W moim przypadku podczas tworzenia „kontrolera MVC 5 z widokiem przy użyciu Entity Framework” pojawiał się błąd.
Po prostu musiałem skompilować projekt po utworzeniu klasy Model i nie musiałem używać adnotacji [Klucz].
źródło
Użycie klawisza [key] nie zadziałało, ale użycie właściwości id to robi. Po prostu dodaję tę właściwość w mojej klasie.
źródło
[Key]
, ale właściwość o nazwie „id
” również będzie działać.Obiekt musi zawierać pole, które będzie używane jako pole
Primary Key
, jeśli masz pole o nazwie,Id
będzie to domyślnie klucz podstawowy obiektu, do którego będzie się łączyć Entity Framework.W przeciwnym razie dodaj
[Key]
atrybut powyżej tego pola, którego chcesz użyć jako polaPrimary Key
, a także musisz dodać przestrzeń nazwSystem.ComponentModel.DataAnnotations
:https://stackoverflow.com/a/51180941/7003760
źródło
Dodatkowo pamiętaj, nie zapomnij dodać publicznego słowa kluczowego w ten sposób
musisz użyć takiego słowa kluczowego Public
źródło
Powodem, dla którego struktura EF monituje o brak klucza, jest to, że platforma EF wymaga klucza podstawowego w bazie danych. Aby deklaratywnie powiedzieć EF, która właściwość jest kluczem, należy dodać
[Key]
adnotację. Lub najszybciej dodajID
właściwość. Następnie platforma EFID
domyślnie przyjmie jako klucz podstawowy.źródło
partial
klasa. Możesz utworzyć drugi plik jakopartial
klasę o tej samej nazwie i ponownie dodać właściwość z[Key]
atrybutem.Nie musisz cały czas używać atrybutu klucza. Upewnij się, że plik mapowania poprawnie zaadresował klucz
i nie zapomnij dodać mapowania w OnModelCreating repozytorium
źródło
Dla mnie model był w porządku. To dlatego, że miałem 2 różne wersje frameworka jednostki. Jedna wersja dla projektu internetowego i inna dla wspólnego projektu zawierającego modele.
Musiałem tylko skonsolidować pakiety nuget .
Cieszyć się!
źródło
W porządku, ale w moim przypadku mam dwie takie klasy
Po usunięciu klasy wyższej działa to dobrze.
źródło