asp.net mvc - połącznie z istniejąca bazą danych

0

Witam.
Mam gotowa baze danych na SQL Server. W jakis sposob mogę się do niej połączyć za pomocą Entity Framework. Przy tworzeniu nowej bazy problemu nie ma gdyz baza tworzy sie automatycznie przy dodaniu pol w modelu. Natomiast przy
skorzystaniu z ADO.NET Entity Data Model pojawia sie problem z IEnumerable. A konkretnie:

The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[TestDB.Movies]', but this dictionary requires a model item of type 'TestDB.MoviesDBEntities'.

Prosze o pomoc.

0

Pokaż kod gdzie masz błąd.

0

kontroler:

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

namespace TestDB.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/

       
            // GET: /Home/ 

        private MoviesDBEntities _db = new MoviesDBEntities();

        public ActionResult Index()
        {

            return View(_db.Movies.ToList());

        }
}
}

widok:

 
@model IEnumerable<TestDB.MoviesDBEntities>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.DefaultContainerName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.CommandTimeout)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.DefaultContainerName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.CommandTimeout)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
        </td>
    </tr>
}

</table>

0

Dziala. Doinstalowalem ADO.NET DBContext Generatod i udalo sie polaczyc z baza. Mam jeszcze jedno pytanie:
Czym rózni sie zapis w postaci:

 var data = db.category.Single(p => p.CAT_ID == 2);

od zapisu:

 var data = from d in db.category where d.CAT_ID==2 select d; 

Pytam ponieważ pierwszy zapis poprawnie wyświetla categorie o id 2, natomiast przy drugim zapisie dostaje error

The model item passed into the dictionary is of type 'System.Data.Entity.Infrastructure.DbQuery`1[mobile_store.category]', but this dictionary requires a model item of type 'mobile_store.category'.

0

Różnica jest w tym czym zmienna data jest. W pierwszym wypadku jest obiektem klasy mobile_store.category, w drugim jest zapytaniem LINQ.
Zachowanie dwóch powyższych jest zupełnie różne. W pierwszym wypadku wynik zapytania jest od razu obliczany i jeżeli nie będzie tam dokładnie jedna kategoria spełniająca warunek to rzuci wyjątkiem InvalidOperationException. W drugim przypadku wynik zapytania jest obliczany dopiero gdy będziesz się chciał dostać do tych elementów, które zwraca zapytanie(np. przez for each), dodatkowo wynikiem tego zapytania będzie kolekcja zawierająca dowolną ilość elementów spełniających warunek where [0, ilość rekordów].

0

różnica ta wynika tylko i wyłącznie z powodu użycia metody Single(). gdybyś użył Where(), wynik byłby identyczny.
pamiętaj, że Single() rzuca wyjątkiem, jeśli dostanie więcej niż jeden wynik lub nie dostanie nic.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.