This is a viewer only at the moment see the article on how this works.
To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk
This is a preview from the server running through my markdig pipeline
Añadiendo Cadre de Entidades para Posts de Blog (Part 5)
Sunday, 18 August 2024
El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. 1 El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. 2 El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. 3 El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. 4 El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.
El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.
En las partes anteriores nos ocupamos de cómo configurar la base de datos, cómo están estructurados nuestros controladores y los puntos de vista, cómo funcionan nuestros serviciosM SK2 y cómo se siembra la base con algunos datos iniciales . En esta parte nos ocuparemos de details sobre cómo funciona el servicio basado en EF y cómo podemos usarlos en nuestros controladorsMSC5
Como de costumbre usted puede ver toda la fuente para esto en mi GitHub a) Adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en todos los ámbitos de la vida, incluida la educación;, en la carpeta de Blogs más claraM SK1.
El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad entre los géneros, en particular mediante la adopción de medidas legislativas, administrativas y de otra índole.
El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad entre los géneros en todos los niveles de la enseñanza, incluida la educación primaria y secundaria.
En el pasado hemos utilizado un MarkdownBlogService para obtener nuestros mensajes de blog y idiomas. Este servicio fue introducido en nuestros controladores y vistas. Este service era un simple servicio que leía archivos de marcación desde el disco y los devolvió como BlogViewModels.
Esto utilizó un Diccionario estático para mantener los post del blog y luego devolvió los resultados de ese Diccionário.
public async Task<PostListViewModel> GetPagedPosts(int page = 1, int pageSize = 10, string language = EnglishLanguage)
{
var model = new PostListViewModel();
var posts = GetPageCache().Where(x => x.Value.Language == language)
.Select(x => GetListModel(x.Value)).ToList();
model.Posts = posts.OrderByDescending(x => x.PublishedDate).Skip((page - 1) * pageSize).Take(pageSize).ToList();
model.TotalItems = posts.Count();
model.PageSize = pageSize;
model.Page = page;
return await Task.FromResult(model);
}
El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. GetPagedPosts El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. MarkdownBlogService. Este método obtiene los mensajes de blog del cache y los devolve como un PostListViewModel.
Using Files for storing Markdown files is still a good approach, it makes it simple to add posts (I just save markdown files to disk and check them in) and itM SK3s easy to manageMNK4 But we want to use the database to store the posts and languagesMRK5
flowchart LR
A[Write New Markdown File] -->|Checkin To Github| B(Github Action Triggers) --> C(Builds Docker Image) --> D(Watchtower Pulls new Image) --> E(Site Updated)
Los servicios basados en el EF
El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. [parte anterior]((/blogM SK1addingentityframeworkforblogpostspt4) He mostrado cómo hemos secado la base de datos con los datos del blogMSC3 Esta actualiza cada vez que reemplazamos y reiniciamos el contenedor de docker (El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer, en particular mediante: ) Hemos utilizado un EFBlogPopulator El Grupo de Trabajo tal vez desee tomar nota del informe del Secretario General sobre la aplicación de las recomendaciones contenidas en el párrafo 6 supra.
Ahora nuestro flujo se ve así:
flowchart TD
A[Write New Markdown File] -->|Checkin To Github| B(Github Action Triggers)
B --> C(Builds Docker Image)
C --> D(Watchtower Pulls new Image)
D --> E{New Files Added?}
E -->|Yes| F(Add File to Database)
E -->|No| G(Skip Database Seeding)
F --> H(Site Updated)
G --> H(Site Updated)
Ahora que tenemos los post del blog en nuestra base de datos usamos el EFBlogService El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. IBlogService El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.
public interface IBlogService
{
Task<List<string>> GetCategories();
Task<List<BlogPostViewModel>> GetPosts(DateTime? startDate = null, string category = "");
Task<PostListViewModel> GetPostsByCategory(string category, int page = 1, int pageSize = 10, string language = MarkdownBaseService.EnglishLanguage);
Task<BlogPostViewModel?> GetPost(string slug, string language = "");
Task<PostListViewModel> GetPagedPosts(int page = 1, int pageSize = 10, string language = MarkdownBaseService.EnglishLanguage);
Task<List<PostListModel>> GetPostsForLanguage(DateTime? startDate = null, string category = "", string language = MarkdownBaseService.EnglishLanguage);
}
El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. IBlogService interface. Esta es la interfaz que nuestros controladores utilizan para obtener los mensajes de blog. El EFBlogService ii) La aplicación de esta interfaz y el uso del BlogContext para obtener los datos de la base de datos.
Como con el servicio de Out FileBased El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. Podemos recibir mensajes por categoría, por idioma, por fechaM SK2 y pagadoMSC3
GetPostList
private async Task<PostListViewModel> GetPostList(int count, List<BlogPostEntity> posts, int page, int pageSize)
{
var languages = await NoTrackingQuery().Select(x =>
new { x.Slug, x.LanguageEntity.Name }
).ToListAsync();
var postModels = new List<PostListModel>();
foreach (var postResult in posts)
{
var langArr = languages.Where(x => x.Slug == postResult.Slug).Select(x => x.Name).ToArray();
postModels.Add(postResult.ToListModel(langArr));
}
var postListViewModel = new PostListViewModel
{
Page = page,
PageSize = pageSize,
TotalItems = count,
Posts = postModels
};
return postListViewModel;
}
Aquí usamos nuestra común PostsQuery Sin embargo, en el párrafo 2 de la parte dispositiva del proyecto de resolución se pide a los Estados Miembros que proporcionen información detallada sobre las medidas adoptadas para luchar contra la discriminación racial. NoTrackingQuery que es un método sencillo que devolve una consultable del BlogPostEntity El Comité toma nota con satisfacción de que el Estado Parte ha ratificado la Convención contra la Tortura y Otros Tratos o Penas Crueles, Inhumanos o Degradantes y del Protocolo Facultativo del Pacto Internacional de Derechos Civiles y Políticos. AsNoTrackingWithIdentityResolution añadido. Esto significa que las entidades no son rastreadas por el contexto y son sólo leídas.
protected IQueryable<BlogPostEntity> PostsQuery()=>Context.BlogPosts.Include(x => x.Categories)
.Include(x => x.LanguageEntity);
private IQueryable<BlogPostEntity> NoTrackingQuery() => PostsQuery().AsNoTrackingWithIdentityResolution();
Usted puede ver que también obtenemos las lenguas para los puestos y luego crear un PostListViewModel que es una estructura que acepta la información de mensajería (Page, PageSize El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. TotalItemsEl Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.
GetPost
Nuestro método principal es el GetPost El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. Slug El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. Language. Este es un método sencillo que utiliza el PostsQuery Para obtener el correo y luego le devolve como un BlogPostViewModel.
Pueden ver que también tiene una opción Language En el párrafo 2 de la parte dispositiva del proyecto de resolución, la Asamblea General pidió al Secretario General que le presentara en su quincuagésimo noveno período de sesiones un informe sobre los progresos realizados en la aplicación de las recomendaciones formuladas por la Comisión Consultiva en Asuntos Administrativos y de Presupuesto. EnglishLanguage que es una constante en nuestro MarkdownBaseService El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre los hombres y las mujeres en materia de empleo, incluida la eliminación del trabajo forzoso.
public async Task<BlogPostViewModel?> GetPost(string slug, string language = "")
{
if (string.IsNullOrEmpty(language)) language =MarkdownBaseService.EnglishLanguage;
var post = await NoTrackingQuery().FirstOrDefaultAsync(x => x.Slug == slug && x.LanguageEntity.Name == language);
if (post == null) return null;
var langArr = await GetLanguagesForSlug(slug);
return post.ToPostModel(langArr);
}
Esto también utiliza nuestro método común. GetLanguagesForSlug que obtiene las lenguas para un post. Esta es una metodología simple que devolve las linguas para el post .
private async Task<List<string>> GetLanguagesForSlug(string slug)=> await NoTrackingQuery()
.Where(x => x.Slug == slug).Select(x=>x.LanguageEntity.Name).ToListAsync();
GetPostsByCategory
Este método obtiene los puestos por categoría (como ASPM SK1NET & Cadre de Entidades para este post). Usa el PostsQuery para obtener los puestos y luego los filtra por la categoría. Es entonces regresa a los postes como un PostListViewModel.
public async Task<PostListViewModel> GetPostsByCategory(string category, int page = 1, int pageSize = 10,
string language = MarkdownBaseService.EnglishLanguage)
{
var count = await NoTrackingQuery()
.Where(x => x.Categories.Any(c => c.Name == category) && x.LanguageEntity.Name == language).CountAsync();
var posts = await PostsQuery()
.Where(x => x.Categories.Any(c => c.Name == category) && x.LanguageEntity.Name == language)
.Skip((page - 1) * pageSize)
.Take(pageSize)
.ToListAsync();
var languages = await GetLanguagesForSlugs(posts.Select(x => x.Slug).ToList());
var postListViewModel = new PostListViewModel
{
Page = page,
PageSize = pageSize,
TotalItems = count,
Posts = posts.Select(x => x.ToListModel(
languages.FirstOrDefault(entry => entry.Key == x.Slug).Value.ToArray())).ToList()
};
return postListViewModel;
}
El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.
Usted puede ver que los servicios basados en EF son un poco más complejos que los de archivo, pero son más flexibles y pueden ser utilizados en escenarios más complejo.. Podemos usar los servicios de base en EF en nuestros controladores y vistas para obtener los mensajes de blog y las lenguas. En el futuro, nosotros' construiremos sobre estos y añadiremos servicios como edición en línea y comentarios. En el párrafo 2 de la resolución, la Asamblea General pidió al Secretario General que le presentara en su quincuagésimo séptimo período de sesiones un informe sobre los progresos realizados en la aplicación del Programa de Acción para prevenir, combatir y eliminar el tráfico ilícito de armas pequeñas y ligeras en todos sus aspectos.