Moortiii

Controller Eksempel

Feb 24th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.43 KB | None | 0 0
  1. Kan hende du kom over noe lignende i fjor.
  2.  
  3. Gitt at du har en klasse som refererer til en annen klasse, eksempelvis slik:
  4.  
  5. public class BlogPost
  6. {
  7.     public int BlogPostID { get; set; }
  8.     public string Title { get, set; }
  9.     public string Content { get; set; }
  10.  
  11.     // Her henviser en BlogPost til en annen klasse
  12.     public ApplicationUser Author { get; set; }
  13. }
  14.  
  15. Dersom man skal ha en Edit action i kontroller gjør man noe lignende:
  16.  
  17. Antar at vi har en:
  18.  
  19. private readonly ApplicationDbContext _context;
  20.  
  21. public async Task<IActionResult> Edit(int id, [Bind("BlogPostID, Title, Content") BlogPost post)
  22. {
  23.     // Forfatteren lastes ikke inn automatisk så vi kan gjøre:
  24.     var author = _context.BlogPosts
  25.         .Include(blogPost => blogPost.Author
  26.         .AsNoTracking()
  27.         .FirstOrDefaultAsync(entry => entry.BlogPostId == id)
  28.         .Result
  29.         .Author;
  30.    
  31.     // .NET Lar oss ikke hente ut forfatter uten å spesifisere AsNoTracking, siden begge postene har samme Primary Key
  32.     // Derfor må vi merke den som AsNoTracking(). Er det noen måte å slippe å gjøre dette på, altså at argumentet til
  33.     // funksjonen automatisk laster inn relaterte data på egenhånd?
  34.  
  35.     // Det gjør det forvirrende hvis man skal abstracte til en service klasse og må ha to funksjoner som gjør det samme:
  36.    
  37.     _blogPostService.LoadBlogPostAsync(id);
  38.     _blogPostService.LoadBlogPostAsNonTrackingAsync(id);
  39.  
  40.     if(author.Id != User.Id)
  41.     {
  42.         // Prevent user from editing blog post
  43.     }
  44. }
Add Comment
Please, Sign In to add comment