2015-05-15 2 views
5

Sto utilizzando EntityFramework (EF V6) con Asp.Net per la creazione di un sito Web, in cui ho creato .edmx e .tt e DBContext.Come scrivere query LINQ per CRUD utilizzando Entity Framework?

Sto cercando di creare un oggetto per ogni tabella di Summoner in un secondo momento con aspx

Non so se sto scrivendo le mie query LINQ nel modo giusto !, è per questo che ho bisogno del vostro aiuto su questo.

La tabella che sto cercando di stabilire un oggetto LINQ per questo in questa immagine:

enter image description here

Questa classe di oggetti che ho creato:

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(); 
    } 
} 

è vero giusto o sbagliato?

+0

funziona? se funziona, è giusto! Ci sono molti tutorial su EF se cerchi "C# EF CRUD". –

+1

Ho notato che avevi accettato la risposta di imGreg ma ti suggerirei di leggere il mio e il riferimento che ho fornito per assicurarti che non si verifichino problemi di prestazioni o errori dell'applicazione dovuti al riutilizzo del contesto. – Gent

+0

@Gent, apprezzo molto la tua risposta, è davvero d'aiuto. ma come potresti notare dal mio codice, sono solo un principiante con EDM e LINQ, ho iniziato solo due giorni fa, iniziando a leggere da questo sito: http://www.entityframeworktutorial.net/EntityFramework4.3/delete-entity -using-dbcontext.aspx –

risposta

3

Questi sono gli unici metodi che vorrei cambiare, il resto sembra giusto.

Aggiornato:

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 grazie per il tuo tempo –

+0

Ti sei perso il metodo 'UpdateSubject'. Questo non fa niente –

+0

@GertArnold questo è un oggetto di classe che ho scritto per convocarlo più tardi con ASPX in stato di necessità. –

1

vorrei raccomandare che si cambia la logica per nuovo un contesto in un blocco utilizzando invece di fare riferimento ad un contesto condiviso. La vita di EF Contesto:

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

Ecco alcune linee guida generali al momento di decidere la durata del contesto:

  • Quando si lavora con il contesto di lunga durata considerare quanto segue:
    • Come carichi più oggetti e i loro riferimenti in memoria, il consumo di memoria del contesto può aumentare rapidamente. Ciò potrebbe causare problemi di prestazioni .
    • Ricordarsi di disporre del contesto quando è non più richiesto.
    • Se un'eccezione causa il contesto in uno stato irrecuperabile , l'intera applicazione potrebbe terminare.
    • Le probabilità di incorrere in problemi correlati alla concorrenza aumentano man mano che il divario si estende tra il momento in cui i dati vengono interrogati e aggiornati.
  • Quando si lavora con applicazioni Web, utilizzare un'istanza di contesto per richiesta.
  • Quando si lavora con Windows Presentation Foundation (WPF) o Windows Form, utilizzare un'istanza di contesto per modulo. Ciò ti consente di utilizzare la funzionalità di tracciamento delle modifiche fornita dal contesto.

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

+0

grazie per il tuo tempo! –