2015-05-15 13 views
5

Używam EntityFramework (EF V6) z Asp.Net do tworzenia jednej strony internetowej, W tym Stworzyłem .edmx i .tt i DBContext.Jak pisać zapytania LINQ dla CRUD przy użyciu Entity Framework?

Próbuję utworzyć obiekty na każdy stół, aby go Summoner później z aspx

ja nie wiem, czy piszę moje zapytań LINQ w odpowiedni sposób !, dlatego potrzebuję waszej pomocy na to.

Tabela próbuję ustalić obiekt LINQ dla niego w tym obrazie:

enter image description here

tego obiektu Klasa I stworzyli:

public class LINQSubjects 
{ 
    NewsPaperEntities ctx = new NewsPaperEntities(); 
    // Get Subject 
    public Subject GetSubject(int SubjectID) 
    { 
     Subject sub = ctx.Subjects.FirstOrDefault(s=> s.Subject_ID==SubjectID); 
     return sub; 
    } 
    // Get All Subject Info 
    public List<Subject> GetAllSubjects() 
    { 
     List<Subject> sublist = (from s in ctx.Subjects select s).ToList<Subject>(); 
     return sublist; 
    } 
    // Insert a Subject 
    public void AddSubject(Subject Addsub) 
    { 
     ctx.Subjects.Add(Addsub); 
     ctx.SaveChanges(); 
    } 
    // Delete a Subject 
    public void DeleteSubject(int SubjectID) 
    { 
     Subject sub = ctx.Subjects.FirstOrDefault(s => s.Subject_ID == SubjectID); 
     ctx.Subjects.Remove(sub); 
     ctx.SaveChanges(); 
    } 
    // Edit a Subject 
    public void UpdateSubject(Subject Newsub) 
    { 
     Subject Oldsub = ctx.Subjects.FirstOrDefault(s => s.Subject_ID == Newsub.Subject_ID); 
     Oldsub = Newsub; 

     ctx.SaveChanges(); 
    } 
} 

jest to prawda czy fałsz?

+0

Czy to działa? jeśli to działa, to prawda! Istnieje wiele samouczek na temat EF, jeśli szukasz "C# EF CRUD". –

+1

Zauważyłem, że zaakceptowałeś odpowiedź imGreg, ale naprawdę poleciłbym przeczytanie mojej i referencji, którą podałem, aby upewnić się, że nie skończysz z problemami z wydajnością lub błędami aplikacji z powodu ponownego użycia kontekstu. – Gent

+0

@Gent, naprawdę doceniam twoją odpowiedź, to naprawdę pomocne. ale jak zauważyłeś z mojego kodu, jestem tylko początkującym z EDM i LINQ, zacząłem tylko dwa dni temu, zaczynając od tej strony: http://www.entityframeworktutorial.net/EntityFramework4.3/delete-entity -using-dbcontext.aspx –

Odpowiedz

3

To są jedyne metody, które chciałbym zmienić, pozostałe wyglądają prawidłowo.

Aktualizacja:

public List<Subject> GetAllSubjects() 
    { 
     List<Subject> sublist = ctx.Subjects.ToList(); 
     return sublist; 
    } 
    public void DeleteSubject(int SubjectID) 
    { 
     Subject sub = ctx.Subjects.FirstOrDefault(s => s.Subject_ID == SubjectID); 

     if(sub!=null)//FirstorDefault can return null 
     { 
      ctx.Subjects.Remove(sub); 
      ctx.SaveChanges(); 
     } 
    } 
    //This is with the assumption that the parameter Newsub is attached to the context already. 
    //As in you got the sub from the context then changed it then passed it into UpdateSubject 
    public void UpdateSubject(Subject Newsub) 
    { 
     Subject Oldsub = ctx.Subjects.FirstOrDefault(s => s.Subject_ID == Newsub.Subject_ID); 
     if(Oldsub !=null)//FirstorDefault can return null 
     {     
      Oldsub = Newsub; 
      //If Newsub is not attached you have to set manually set each property. 
      //i.e.Oldsub.Name = Newsub.Name; 
      ctx.SaveChanges(); 
     } 
    } 
+0

@imGerg dzięki za twój czas –

+0

Tęskniłeś za metodą 'UpdateSubject'. To nic nie robi. –

+0

@GertArnold to obiekt klasy, który napisałem, aby przywołać go później z ASPX w potrzebie. –

1

Polecam, zmienić logikę do nowej sytuacji, w bloku using zamiast odnoszące się do wspólnego kontekstu. Życie EF kontekstowego za:

using(var ctx = new NewsPaperEntities()) 
{ 
    ctx.Subjects.Add(Addsub); 
    ctx.SaveChanges(); 
} 

Oto kilka ogólnych wskazówek przy podejmowaniu decyzji na całe życie kontekście :

  • Przy pracy z długo działających kontekście należy rozważyć następujące kwestie:
    • Jak ładujesz więcej obiektów i ich odniesień do pamięci, zużycie pamięci kontekstu może gwałtownie wzrosnąć. Może to spowodować problemy z wydajnością.
    • Pamiętaj, aby pozbyć się kontekstu, gdy jest on już niepotrzebny .
    • Jeśli wyjątek powoduje, że kontekst jest w stanie nieodzyskiwalnym, cała aplikacja może zostać zakończona.
    • Szanse na rozwiązywanie problemów związanych z współbieżnością zwiększają się wraz ze wzrostem luki między datą zapytania i aktualizacją danych.
  • Podczas pracy z aplikacjami WWW użyj instancji kontekstu dla każdego żądania.
  • Podczas pracy z Windows Presentation Foundation (WPF) lub Windows Forms należy użyć instancji kontekstu dla każdego formularza. Dzięki temu możesz korzystać z funkcji śledzenia zmian, które zapewnia kontekst.

referencyjny: https://msdn.microsoft.com/en-us/data/jj729737.aspx?f=255&MSPPError=-2147217396

+0

dzięki za poświęcony czas! –

Powiązane problemy