2016-05-19 15 views
0

Ich bin neu in MVC und ich weiß nicht, ob ich sogar die richtige Frage stelle, aber ich benutze EF und folgte einem Tutorial, das DBContext verwendet, möchte ich einige Daten von My auffüllen EF zur Anzeige in einer Ansicht, die CRUD-Operationen ermöglicht.Verwendung von DBContext mit Entity Framework

Model: 

[Table("ProjectInformation")] 
public class ProjectDetailsViewModels 
{ 
    [Key] 
    public int pkiProjectID { get; set; } 
    public string ProjectName { get; set; } 
    public string DesignerName { get; set; } 
    public string ProjectType { get; set; } 
    public string FluidType { get; set; } 
    public string PipeMaterial { get; set; } 
} 


public class ProjectDBContext : DbContext 
{ 
    public DbSet<ProjectDetailsViewModels> Projects { get; set; } 
} 

Unten ist mein Controller und ich habe nur die Create-Methode hinzugefügt.

Controller: 

public class ProjectDetailController : Controller 
{ 

    private ProjectDBContext db = new ProjectDBContext(); 

    public ActionResult Index() 
    { 
     return View(db.Projects.ToList()); 
    } 

    // GET: Movies/Details/5 
    public ActionResult Details(int? id) 
    { 
     if (id == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 
     ProjectDetailsViewModels ProjectModel = db.Projects.Find(id); 
     if (ProjectModel == null) 
     { 
      return HttpNotFound(); 
     } 
     return View(ProjectModel); 
    } 

    // GET: Movies/Create 
    public ActionResult Create() 
    { 
     return View(); 
    } 

    // POST: Movies/Create 
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598. 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include = "pkiProjectID,ProjectName,DesignerName,ProjectType,FluidType, PipeMaterial")] ProjectDetailsViewModels ProjectModel) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Projects.Add(ProjectModel); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(ProjectModel); 
    } 
} 

Unten ist mein Ausblick:

View : 

@model IEnumerable<AirFlo_Size_Programme.Models.ProjectDetailsViewModels> 
@{ 
ViewBag.Title = "Index"; 
Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2>Index</h2> 

<p> 
@Html.ActionLink("Create New", "Create") 
</p> 
<table class="table"> 
<tr> 
    <th> 
     @Html.DisplayNameFor(model => model.ProjectName) 
    </th> 
    <th> 
     @Html.DisplayNameFor(model => model.DesignerName) 
    </th> 
    <th> 
     @Html.DisplayNameFor(model => model.ProjectType) 
    </th> 
    <th> 
     @Html.DisplayNameFor(model => model.FluidType) 
    </th> 
    <th> 
     @Html.DisplayNameFor(model => model.PipeMaterial) 
    </th> 
    <th></th> 
</tr> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.ProjectName) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.DesignerName) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.ProjectType) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.FluidType) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.PipeMaterial) 
     </td> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id=item.pkiProjectID }) | 
      @Html.ActionLink("Details", "Details", new { id=item.pkiProjectID }) | 
      @Html.ActionLink("Delete", "Delete", new { id=item.pkiProjectID }) 
     </td> 
    </tr> 
} 

</table> 

Unten ist der Fehler im bekommen:

Invalid object name 'dbo.ProjectInformation'. 

So aufgrund eines anderen Beitrag habe ich gelesen, habe ich die Nach meinem Modell:

Ive überprüft und jede dieser Tabellen haben einen Primärschlüssel.

Lassen Sie mich wissen, wo ich falsch liege/was mache ich falsch?

Danke!

+0

Versuchen Sie, nur 'public int Id' auf' ProjectDetailsViewModels' oder dekorieren 'pkiProjectID' mit dem Attribut [Key]. –

+0

Danke für die schnelle Antwort. Ich habe beide ausprobiert und erhalte immer noch den gleichen Fehler – AxleWack

+0

Sie haben Ihr ProjectInformation-Modell nicht eingeschlossen, also können wir es nicht wirklich sagen. –

Antwort

0

Sie müssen das Attribut [Key] für das Primärschlüsselfeld angeben. Dann versteht nur Entity Framework es als Primärschlüssel.

public class ProjectDetailsViewModels 
{ 
    [Key] 
    public int pkiProjectID { get; set; } 
    public string ProjectName { get; set; } 
    public string DesignerName { get; set; } 
    public string ProjectType { get; set; } 
    public string FluidType { get; set; } 
    public string PipeMaterial { get; set; } 
} 

Auch ich denke, Sie definieren andere Felder falsch.

public string ProjectName { get; set; } 

Dies macht keinen Sinn

ich denke, es

public ProjectName ProjectName { get; set; } 

oder

sein sollte
public string Name { get; set; } 
Verwandte Themen