-1

Fragen kurz, ich denke, wer das Thema kennt, wird das Problem verstehen.ASP.NET MVC erfordert [Schlüssel] in den Modellen, wenn SQL-Datenbank zugreifen

ERROR EntityType hat keine Taste

I definiert SQL Express Datenbank mit Daten: Bücher, Verkäufer, Vertrieb. Alle Felder, Schlüssel und Relationen sind korrekt eingestellt.

Ich erstellen Modelle durch Hinzufügen von ADO.NET EF, so dass es Modelle aus meiner Datenbank generiert.

[EDIT] Modelle werden hinzugefügt, indem Sie mit der rechten Maustaste auf den Ordner Modelle klicken und dann Hinzufügen -> ADO.NET Entity Data Model auswählen. Wählen Sie dann die Datenbank und die Tabellen aus, die hinzugefügt werden sollen. Anschließend wird das Schema mit allen Klassen für Bücher, Verkäufer, Sales und Context - cs- und tt-Dateien im Projekt angezeigt. Dann auf dieses Schema klicke ich mit der rechten Maustaste und wähle Add Code Generation Item und wähle dann EF5 Db Context Generator. Verbindungszeichenfolge wurde aus web.config ausgewählt.

<connectionStrings> 
    <add name="BookStoreConnection" providerName="System.Data.SqlClient" connectionString="Data Source=COMPUTERNAME\SQLEXPRESS;Initial Catalog=BookStore;Integrated Security=True" /> 
</connectionStrings> 

Dies ist beispielsweise der erzeugten Klasse Buch:

using System; 
using System.Collections.Generic; 
using System.Web.Mvc; 

namespace BookStore.Models 
{ 
[Bind(Exclude="book_id")] 
public class Book 
{ 
    public int book_id { get; set; } 

    public string book_title { get; set; } 
    public string book_author { get; set; } 
    public Nullable<double> book_price { get; set; } 

    public virtual ICollection<Sale> Sales { get; set; } 
} 
} 

ich einen Controller hinzufügen, Daten aus db Kontext abrufen:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Data.Entity; 
using BookStore.Models; 

namespace BookStore.Controllers 
{ 
    public class BooksController : Controller 
    { 
     // 
     // GET: /Book/ 

     BSEntities db = new BSEntities(); 

     public ActionResult Index() 
     { 
      var books = db.Books.ToList(); 
      return View(books); 
     } 

    } 
} 

I Ansicht erstellen und versuchen Modell Eigenschaften, wie zu lesen wie book_title usw.

Und wenn ich nicht setzen die [Key] Parameter in Bücher, Vertrieb und Verkäufer Klassen, zeigen sie diesen Fehler

enter image description here

Nachdem ich diesen Parameter setzen, ist es die Bücher Seite zeigen, aber ohne Daten .

Warum ist das? Wenn ich Modelle aus der vorhandenen Datenbank erstellen möchte, warum muss das Schlüsselfeld manuell festgelegt werden?

Sieht aus wie es von einem anderen Ort lädt.

Wie kann ich mein Modell mit der externen SQL Express-Datenbank arbeiten lassen?

+0

Hat die * Datenbank * irgendwelche Schlüssel definiert? Wenn nicht, würde das erklären, warum EF keine im Code generiert hat. Ich vermute, dass EF sie benötigt. – David

+0

Natürlich ist Datenbank sehr einfach und korrekt gebaut – SWA

+0

Für ein Modell, das den Fehler erzeugt, können Sie die Tabellendefinition und das Modell, das generiert wurde, zeigen? – David

Antwort

0

Beantwortung meiner Frage mich

1) OPTIONAL. Ich habe das Service Pack 2-Update für meinen SQL Server 2008 installiert.

2) Ich habe alle generierten Modelle aus meinem MVC-Projekt entfernt. Der gesamte Knoten beginnend mit ModelName.edmx

3) Generieren Sie neue ADO.NET-Daten. Rechtsklick auf das Projekt, fügen Sie hinzu -> ADO.NET Entity Data. Alle Inhalte werden im Stammprojektordner angezeigt.

4) Erstellen Sie einen Controller mit Funktionen zum Bearbeiten, Erstellen usw. und konfigurieren Sie ihn für die Verwendung eines Modells und eines Datenbankkontexts. Ansichten werden automatisch hinzugefügt.

Verwandte Themen