Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1021 connectés 

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  69  70  71  ..  75  76  77  78  79  80
Auteur Sujet :

[Topic unique] .Net @ Prog

n°2382194
DiB91
Bwaaaaaaah
Posté le 20-04-2021 à 17:08:54  profilanswer
 

Reprise du message précédent :
Merci pour ta réponse.  
Je vais me renseigner sur Tesseract.
Pas de souci pour payer une licence pour ça, je me doute bien au vu du travail fourni, que ça a un coût, ça ne m'inquiète pas :jap:


---------------
La DiBerie | Rehost | Link
mood
Publicité
Posté le 20-04-2021 à 17:08:54  profilanswer
 

n°2383828
nucl3arfl0
Better Call Saul
Posté le 04-05-2021 à 18:03:55  profilanswer
 

Hello,
Y en a qui font du EF Core et .NET Core ?
 
J'ai un souci de génération/mapping d'attribut pour mon entité.
 
J'ai une entité A qui dispose d'une propriété d'état/statut.
Cette propriété d'état/statut est en fait une énumération (ID, et le nom correspondant à son ID).
En base de données, je fais persister les valeurs de l'enum dans une table à part et j'ai une relation de clé étrangère avec l'entité A et la table d'enum.
 
Côté mapping, je voudrais avoir l'enum en type propriété de mon entité, et pas un entier qui correspond à l'ID de l'enum.
Côté configuration des entités, je voudrais dire comment je convertis en enum, mais aussi comment spécifier la clé étrangère.
Et c'est le dernier point qui me bloque, je vois pas comment faire....
 
https://docs.microsoft.com/fr-fr/ef [...] nnotations
+
https://docs.microsoft.com/fr-fr/ef [...] simple-key
 
 
Merci :jap:

n°2383848
ixemul
Nan mais sans blague ! ⚡
Posté le 04-05-2021 à 20:28:47  profilanswer
 

nucl3arfl0 a écrit :

Hello,
Y en a qui font du EF Core et .NET Core ?

 

J'ai un souci de génération/mapping d'attribut pour mon entité.

 

J'ai une entité A qui dispose d'une propriété d'état/statut.
Cette propriété d'état/statut est en fait une énumération (ID, et le nom correspondant à son ID).
En base de données, je fais persister les valeurs de l'enum dans une table à part et j'ai une relation de clé étrangère avec l'entité A et la table d'enum.

 

Côté mapping, je voudrais avoir l'enum en type propriété de mon entité, et pas un entier qui correspond à l'ID de l'enum.
Côté configuration des entités, je voudrais dire comment je convertis en enum, mais aussi comment spécifier la clé étrangère.
Et c'est le dernier point qui me bloque, je vois pas comment faire....

 

https://docs.microsoft.com/fr-fr/ef [...] nnotations
+
https://docs.microsoft.com/fr-fr/ef [...] simple-key

 


Merci :jap:

 

J'ai fait un truc comme ça il y a quelques mois, mais j'ai pas mon code sous la main. La semaine prochaine peut-être ?  ;)


---------------
VA APPRENDRE ET REVIENS QUAND TU SAIS, SINON ABSTIENT TOI C'EST UN GRAND CONSEIL QUE JE TE DONNE... TU ES INCOMPÉTENT ET C'EST UNE RÉALITÉ, TU N'AS RIEN A FAIRE ICI FAUT S'Y CONNAITRE ... -Jojo1998 - RIP - http://tinyurl.com/qc47ftk
n°2383849
nucl3arfl0
Better Call Saul
Posté le 04-05-2021 à 20:29:27  profilanswer
 

Oui très bien, si jamais je trouve pas la solution d'ici là  :D

 

Merci !

n°2383857
Yor_le_Bou​rrin
Posté le 05-05-2021 à 10:08:25  profilanswer
 

Je ne suis pas sûr de piger le problème. C'est un truc comme ça que tu veux ?
 

Code :
  1. public enum ActionEnum
  2. {
  3. [EnumMember(Value = "Action1" )]
  4. Action1 = 0,
  5. [EnumMember(Value = "Action2" )]
  6. Action2 = 1,
  7. [EnumMember(Value = "Action3" )]
  8. Action3 = 2
  9. }
  10. public class DbAction
  11. {
  12. public ActionEnum Id { get; set; }
  13. public string Name { get; set; }
  14. }


 
Dans ton Context tu rajoutes l'init :

Code :
  1. protected override void OnModelCreating(ModelBuilder modelBuilder)
  2. {
  3. modelBuilder.Entity<DbAction>(entity =>
  4. {
  5.  entity.HasData(Enum.GetValues(typeof(ActionEnum))
  6.   .Cast<ActionEnum>()
  7.   .Select(e => new DbAction()
  8.   {
  9.    Id = e,
  10.    Name = e.ToString()
  11.   }));
  12. });
  13. }


 
Je ne mets pas la déclaration des clefs étrangères dans les autres tables, c'est trivial / standard à partir de la classe DbAction.
 
En DB ça se traduit par une table DbAction : Id PK int, Name NVarchar

n°2383876
DiB91
Bwaaaaaaah
Posté le 05-05-2021 à 12:02:39  profilanswer
 

Bonjour par ici :)

 

Tiens ben justement, ça y est, j'ai franchi le cap aussi :)
J'ai commencé à me former sur le développement web ASP .NET Core avec EF Core.
J'ai plein de questions, je vais essayer d'être le plus concis possible.

 


Formation
Pour le moment, je suis en formation autonome sur le sujet, en suivant les tutos Microsoft
J'ai bien compris que la tendance est plutôt à privilégier Razor Pages, mais de mon côté, les projets que j'ai sont plutôt complexes et mettent en oeuvre des bases de données SQL Server complexes et dédiées, avec de mon côté, du Linq à gogo. Il me faut donc, si j'ai bien compris, plutôt partir sur ASP .NET Core MVC.
Ca tombe bien, ça fait 10 ans que je fais de l'ASP .NET MVC au quotidien, avec Razor et EF :)

 

Architecture du projet web
Le premier point qui me rebute un peu, c'est l'architecture de ma solution.
Si on suit le tuto à la lettre, on se retrouve avec un seul projet où toute la pile technique est en vrac à la racine.
Ca réveille en moi des troubles obsessionnels assez violents :o
Bien sûr, on peut créer des dossiers et bidouiller les namespaces, c'est déjà ça, mais il n'existe pas d'architecture type N-tiers ou un découplage au moins an 2 (disons Entity + UI quoi...) native ?
J'ai cru comprendre que l'injection de dépendance était incluse nativement dans cette techno, donc je me serai attendu à un truc découplé à mort :??:

 

Fonctionnement avec des données
Depuis ~8 ans que ça existe, JAMAIS je ne me suis retrouvé dans le cas pratique à "devoir" (voire même "pouvoir" ) utiliser Code First...
Non seulement c'est chiant à utiliser dans un contexte de création de projet, avec des lignes de commandes de migrations à taper à la main, en plus ça fait faire des AVC à mes collègues DBA.
Sur la vingtaine de projets différents (~70% maintenance + ~30% nouveau projet) sur lesquels j'ai bossé depuis 10 ans, je n'ai eu que 2 ou 3 fois la liberté de créer moi-même, développeur, la base de données SQL cible.
Et pour ces 3 fois, JAMAIS je n'ai eu l'idée saugrenue ... de générer une base de données depuis du code C# :/
Même dans une démarche de gestion de projet documentée, rien ne remplace, face au client, un bon vieux schéma de structure où les champs et les types clairs apparaissent graphiquement.
Donc tout naturellement, dans les équipes où j'ai trainé, on a toujours largement préféré designer nos bases de données dans SSMS, puis les importer dans nos projets sous VS, en fonctionnement DB First, donc.
Heureusement, c'est toujours possible avec EF Core, mais le scaffolding (habituellement fait par la transfo T4 via l'EDMX) en ligne de commandes, à chaque mise à jour de la structure de la base de données... au secours :/
Il n'existe toujours pas de technique un peu plus user friendly, qui remplacerait le bon vieil EDMX, que je puisse connecter à mon serveur SQL Server de dev et qui puisse générer mes entities, mon dbcontext et pourquoi pas, mes services de base ?
Je vais avoir besoin d'un peu plus que des CRUD auto générées là pour mes applis :o

 

Merci de m'avoir lu, déjà :)
Si vous avez des bouquins, des eBooks, des tutos, des blogs sur le sujet, n'hésitez pas, vraiment.
Je doute pas une minute que je passe à côté de quelque chose avec mes vieilles habitudes so 2012, mais j'ai besoin d'un petit peu d'aide pour franchir le cap, alors autant que ça soit fait dans les best practices, pour pas déjà prendre de mauvaises habitudes... :jap:
:hello:

Message cité 1 fois
Message édité par DiB91 le 05-05-2021 à 12:04:24

---------------
La DiBerie | Rehost | Link
n°2383885
nucl3arfl0
Better Call Saul
Posté le 05-05-2021 à 14:07:18  profilanswer
 

Yor_le_Bourrin a écrit :

Je ne suis pas sûr de piger le problème. C'est un truc comme ça que tu veux ?
 

Code :
  1. public enum ActionEnum
  2. {
  3. [EnumMember(Value = "Action1" )]
  4. Action1 = 0,
  5. [EnumMember(Value = "Action2" )]
  6. Action2 = 1,
  7. [EnumMember(Value = "Action3" )]
  8. Action3 = 2
  9. }
  10. public class DbAction
  11. {
  12. public ActionEnum Id { get; set; }
  13. public string Name { get; set; }
  14. }


 
Dans ton Context tu rajoutes l'init :

Code :
  1. protected override void OnModelCreating(ModelBuilder modelBuilder)
  2. {
  3. modelBuilder.Entity<DbAction>(entity =>
  4. {
  5.  entity.HasData(Enum.GetValues(typeof(ActionEnum))
  6.   .Cast<ActionEnum>()
  7.   .Select(e => new DbAction()
  8.   {
  9.    Id = e,
  10.    Name = e.ToString()
  11.   }));
  12. });
  13. }


 
Je ne mets pas la déclaration des clefs étrangères dans les autres tables, c'est trivial / standard à partir de la classe DbAction.
 
En DB ça se traduit par une table DbAction : Id PK int, Name NVarchar


Je viens de me rendre compte que j'utilisais pas le bon terme depuis le début. [:nucl3arfl0:4]  
C'est pas une vrai énumération (enum c# stricto sensus), mais une classe qui est comme une enum (peut être qu'il y a possibilité de remplacer ma classe en enum)
 
En gros :

Code :
  1. public class MyEntityState
  2. {
  3.      public string Name { get; set; }
  4.      public int Id { get; set; }
  5. }
  6. public class MyEntity
  7. {
  8.     public MyEntityState State { get; set; }
  9.     public string Name { get; set; }
  10. }


 
MyEntityState = j'ai une liste prédéfinie :
0 - Created
1 - Started
..
 
Côté DB, j'ai deux tables :
 

Code :
  1. MyEntity
  2. ----------------------------------------
  3. | Id (PK)                                      |
  4. | Name                                        |
  5. | StateId (FK -> MyEntityState.Id) |
  6. ----------------------------------------
  7. MyEntityState
  8. ----------------
  9. | Id (PK)       |
  10. | Name         |
  11. ----------------


MyEntityState c'est une table déjà remplie à la création de la DB.
Et je veux éviter d'avoir ça (backing field?) :

Code :
  1. public class MyEntity
  2. {
  3.     public MyEntityState State { get; set; }
  4.     public int MyEntityStateID { get; set; }
  5.     public string Name { get; set; }
  6. }


 
Je sais pas si je suis clair :D


Message édité par nucl3arfl0 le 05-05-2021 à 14:12:09
n°2383893
Yor_le_Bou​rrin
Posté le 05-05-2021 à 15:03:43  profilanswer
 

Tu cherches donc juste à faire une référence étrangère ? Logiquement tu n'as rien à faire (cf. https://docs.microsoft.com/fr-fr/ef [...] mple-key). Tu peux cependant clarifier dans ton contexte un truc du genre :
 

Code :
  1. protected override void OnModelCreating(ModelBuilder modelBuilder)
  2. {
  3. modelBuilder.Entity<MyEntity>()
  4.  .HasOne(me => me.State);
  5. }

n°2383901
TotalRecal​l
Posté le 05-05-2021 à 15:29:03  profilanswer
 

DiB91 a écrit :

Bonjour par ici :)

 

Tiens ben justement, ça y est, j'ai franchi le cap aussi :)
J'ai commencé à me former sur le développement web ASP .NET Core avec EF Core.
J'ai plein de questions, je vais essayer d'être le plus concis possible.

 


Formation
Pour le moment, je suis en formation autonome sur le sujet, en suivant les tutos Microsoft
J'ai bien compris que la tendance est plutôt à privilégier Razor Pages, mais de mon côté, les projets que j'ai sont plutôt complexes et mettent en oeuvre des bases de données SQL Server complexes et dédiées, avec de mon côté, du Linq à gogo. Il me faut donc, si j'ai bien compris, plutôt partir sur ASP .NET Core MVC.
Ca tombe bien, ça fait 10 ans que je fais de l'ASP .NET MVC au quotidien, avec Razor et EF :)

 

Architecture du projet web
Le premier point qui me rebute un peu, c'est l'architecture de ma solution.
Si on suit le tuto à la lettre, on se retrouve avec un seul projet où toute la pile technique est en vrac à la racine.
Ca réveille en moi des troubles obsessionnels assez violents :o
Bien sûr, on peut créer des dossiers et bidouiller les namespaces, c'est déjà ça, mais il n'existe pas d'architecture type N-tiers ou un découplage au moins an 2 (disons Entity + UI quoi...) native ?
J'ai cru comprendre que l'injection de dépendance était incluse nativement dans cette techno, donc je me serai attendu à un truc découplé à mort :??:

 

Fonctionnement avec des données
Depuis ~8 ans que ça existe, JAMAIS je ne me suis retrouvé dans le cas pratique à "devoir" (voire même "pouvoir" ) utiliser Code First...
Non seulement c'est chiant à utiliser dans un contexte de création de projet, avec des lignes de commandes de migrations à taper à la main, en plus ça fait faire des AVC à mes collègues DBA.
Sur la vingtaine de projets différents (~70% maintenance + ~30% nouveau projet) sur lesquels j'ai bossé depuis 10 ans, je n'ai eu que 2 ou 3 fois la liberté de créer moi-même, développeur, la base de données SQL cible.
Et pour ces 3 fois, JAMAIS je n'ai eu l'idée saugrenue ... de générer une base de données depuis du code C# :/
Même dans une démarche de gestion de projet documentée, rien ne remplace, face au client, un bon vieux schéma de structure où les champs et les types clairs apparaissent graphiquement.
Donc tout naturellement, dans les équipes où j'ai trainé, on a toujours largement préféré designer nos bases de données dans SSMS, puis les importer dans nos projets sous VS, en fonctionnement DB First, donc.
Heureusement, c'est toujours possible avec EF Core, mais le scaffolding (habituellement fait par la transfo T4 via l'EDMX) en ligne de commandes, à chaque mise à jour de la structure de la base de données... au secours :/
Il n'existe toujours pas de technique un peu plus user friendly, qui remplacerait le bon vieil EDMX, que je puisse connecter à mon serveur SQL Server de dev et qui puisse générer mes entities, mon dbcontext et pourquoi pas, mes services de base ?
Je vais avoir besoin d'un peu plus que des CRUD auto générées là pour mes applis :o

 

Merci de m'avoir lu, déjà :)
Si vous avez des bouquins, des eBooks, des tutos, des blogs sur le sujet, n'hésitez pas, vraiment.
Je doute pas une minute que je passe à côté de quelque chose avec mes vieilles habitudes so 2012, mais j'ai besoin d'un petit peu d'aide pour franchir le cap, alors autant que ça soit fait dans les best practices, pour pas déjà prendre de mauvaises habitudes... :jap:
:hello:

 

Le Code First c'est bien pour de l'embarqué ou des bases "locales" (genre la mini bdd qui accompagne un projet winform sur le poste de l'utilisateur), pas pour des projets sérieux avec une base centralisée et un DBA armé qui regarde ce que tu fais dessus.
Perso j'ai jamais fait de code first non plus, et l'EDMX (aussi chiant soit il) me manquait un peu au début.
Mais le scaffolding, ça marche vraiment bien et l'appel tient en une seule ligne de commande. Faut juste connaître toutes les raisons qui font que le truc foire la première fois qu'on veut s'en servir (et les douze essais suivants) : https://stackoverflow.com/a/51347228/461444
Je partage parce que j'ai pas mal ramé au début vu que les warnings sont incompréhensibles, et ça ne s'est pas bcp amélioré au fil des versions il me semble.
Au final ça te génère des classes très propres, et c'est bcp plus maintenable que l'usine à gaz à quoi ton EDMX ressemble dès que tu as plus d'une dizaine de tables. Et tu ne passes plus des heures à corriger des warnings imbitables sur des clés qui ne pointent nulle part ou ce genre de connerie.

 

Pour l'archi en couche, à toi de faire tes différentes assemblies, ne pas se laisser influencer par les templates et générateurs Microsoft qui poussent à ce que que tout soit dans le même projet.

Message cité 1 fois
Message édité par TotalRecall le 05-05-2021 à 15:31:06

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2383912
nucl3arfl0
Better Call Saul
Posté le 05-05-2021 à 16:49:35  profilanswer
 

Yor_le_Bourrin a écrit :

Tu cherches donc juste à faire une référence étrangère ? Logiquement tu n'as rien à faire (cf. https://docs.microsoft.com/fr-fr/ef [...] mple-key). Tu peux cependant clarifier dans ton contexte un truc du genre :
 

Code :
  1. protected override void OnModelCreating(ModelBuilder modelBuilder)
  2. {
  3. modelBuilder.Entity<MyEntity>()
  4.  .HasOne(me => me.State);
  5. }



En fait, ça, ça ne marche pas, car il essaie d'insérer l'objet State dans la table MyEntityState alors que je ne veux que l'ID dans la table MyEntity
 
J'ai regardé du côté de Value Object et la méthode OwnsOne, mais je ne crois pas que ça réponde exactement à mon cas (à mon avis, soit j'ai mal modélisé mon truc, soit j'approche le problème de la mauvaise manière)

mood
Publicité
Posté le 05-05-2021 à 16:49:35  profilanswer
 

n°2383923
DiB91
Bwaaaaaaah
Posté le 05-05-2021 à 18:35:57  profilanswer
 

TotalRecall a écrit :

 

Le Code First c'est bien pour de l'embarqué ou des bases "locales" (genre la mini bdd qui accompagne un projet winform sur le poste de l'utilisateur), pas pour des projets sérieux avec une base centralisée et un DBA armé qui regarde ce que tu fais dessus.
Perso j'ai jamais fait de code first non plus, et l'EDMX (aussi chiant soit il) me manquait un peu au début.
Mais le scaffolding, ça marche vraiment bien et l'appel tient en une seule ligne de commande. Faut juste connaître toutes les raisons qui font que le truc foire la première fois qu'on veut s'en servir (et les douze essais suivants) : https://stackoverflow.com/a/51347228/461444
Je partage parce que j'ai pas mal ramé au début vu que les warnings sont incompréhensibles, et ça ne s'est pas bcp amélioré au fil des versions il me semble.
Au final ça te génère des classes très propres, et c'est bcp plus maintenable que l'usine à gaz à quoi ton EDMX ressemble dès que tu as plus d'une dizaine de tables. Et tu ne passes plus des heures à corriger des warnings imbitables sur des clés qui ne pointent nulle part ou ce genre de connerie.

 

Pour l'archi en couche, à toi de faire tes différentes assemblies, ne pas se laisser influencer par les templates et générateurs Microsoft qui poussent à ce que que tout soit dans le même projet.

 

Merci bcp pour ta réponse :) :love:

 

Effectivement, j'ai jeté un petit coup d'oeil dans la journée, et j'admets qu'avec la même base de données, il y a une nette différence entre les classes partielles générées depuis l'EDMX (projet ASP .NET MVC 4 / EF 6) et celles scaffoldées depuis la ligne NPM du nouveau projet (ASP .NET Core 5 MVC / EF Core), en faveur de la dernière :ouch:
Les types sont plus "propres" et lisibles, y a pas de décoration à tout va, c'est presque ce que j'aurai écrit à la main y a 15 ans de ça dans mes DB objects (c'est un compliment :o ).

 

Tu me confirmes que ce scaffolding gère les mises à jour de structure de la base de données ?
Genre si je transforme une PK en INT -> BIGINT il saura me transformer la propriété  int32 > long, sans que je doive tout péter et refaire de zéro ?
J'ai vu que ça gère très bien les relations 1-n aussi, là où j'ai parfois eu des surprises avec EF 4 par le passé.
J'ai juste foiré mes PK que j'ai appelé "IdNomDeTable" au lieu de "ID" ou "NomDeTableId", mais OSEF, les données sont quand même gérées, c'est beau :ouch:

 

Il ne me manque donc plus qu'une représentation graphique pour présenter au client ou au chef de projet lors des réunions, mais pour ça, j'utilise les schéma SSMS donc ça roule.

 

Questions d'habitude donc :)

 

Pour l'architecture des projets, ouf, ça me rassure.
Je viens de voir qu'on peut, en effet, sélectionner le projet sur lequel on veut exécuter la commande dans NPM (pour scaffolder la DB sur MonProjet.DAL au lieu de MonProjet.Web par exemple) :jap:

 

Hâte de creuser en tout cas, mais je me rends compte que j'ai d'énormes lacunes c'est dommage.
Il faut absoluement à l'avenir que je m'accorde un peu de veille / formation parce que là c'est chaud.
Par exemple : j'ai toujours évité await/async dont la syntaxe me donne des boutons... là, y a plus trop le choix vu que les templates par défaut sont écrites avec ces concepts là (et c'est très bien !).

 

--> faut que je m'y mette, je suis largué :D

Message cité 2 fois
Message édité par DiB91 le 05-05-2021 à 18:37:23

---------------
La DiBerie | Rehost | Link
n°2383924
nucl3arfl0
Better Call Saul
Posté le 05-05-2021 à 18:41:49  profilanswer
 

T'as déjà fait du repository pattern ?
Du CQRS ?

n°2383925
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 05-05-2021 à 18:52:24  profilanswer
 

Pour l'archi, j'allais proposer une archi hexagonale, simple à mettre en place et super intéressante pour décorréler le code métier du code technique ( https://blog.octo.com/architecture- [...] mentation/ par exemple). On fait toutes nos APIs comme ça.

Message cité 1 fois
Message édité par Taiche le 06-05-2021 à 08:52:06

---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°2383954
antac
..
Posté le 05-05-2021 à 22:27:53  profilanswer
 

Dans notre projet actuel (2 ans qu'on est dessus et on sort le produit dans deux semaines), on est parti sur une architecture multi tenants (via l'utilisation de schémas différents) avec un pattern CQRS (mais sans séparer les bases pour les queries et les commands) avec des commands qui transitent par des messages.  
C'est un poil compliqué pour rentrer dans le projet mais vachement puissant et résiliant.

n°2383961
ixemul
Nan mais sans blague ! ⚡
Posté le 06-05-2021 à 00:04:40  profilanswer
 

Perso, maintenant c'est toujours "clean architecture", c'est moins lourd que du pur domain driven, et c'est tout aussi efficace. Et si le projet tend à passer en domain driven, il y a 90% du taf qui est déjà fait :jap:


---------------
VA APPRENDRE ET REVIENS QUAND TU SAIS, SINON ABSTIENT TOI C'EST UN GRAND CONSEIL QUE JE TE DONNE... TU ES INCOMPÉTENT ET C'EST UNE RÉALITÉ, TU N'AS RIEN A FAIRE ICI FAUT S'Y CONNAITRE ... -Jojo1998 - RIP - http://tinyurl.com/qc47ftk
n°2383962
ixemul
Nan mais sans blague ! ⚡
Posté le 06-05-2021 à 00:05:33  profilanswer
 

Taiche a écrit :

Pour l'archi, j'allais proposer une archi hexagonale, simple à mettre en place et super intéressante pour décorréler le code métier du code technique (https://blog.octo.com/architecture-hexagonale-trois-principes-et-un-exemple-dimplementation/ par exemple). On fait toutes nos APIs comme ça.


Voilà  :D


---------------
VA APPRENDRE ET REVIENS QUAND TU SAIS, SINON ABSTIENT TOI C'EST UN GRAND CONSEIL QUE JE TE DONNE... TU ES INCOMPÉTENT ET C'EST UNE RÉALITÉ, TU N'AS RIEN A FAIRE ICI FAUT S'Y CONNAITRE ... -Jojo1998 - RIP - http://tinyurl.com/qc47ftk
n°2383964
ixemul
Nan mais sans blague ! ⚡
Posté le 06-05-2021 à 00:07:12  profilanswer
 

Et pour la stack, .net core, autofac, mediatR et automapper... avec ça t'es tranquille pour des années :O


Message édité par ixemul le 06-05-2021 à 00:07:29

---------------
VA APPRENDRE ET REVIENS QUAND TU SAIS, SINON ABSTIENT TOI C'EST UN GRAND CONSEIL QUE JE TE DONNE... TU ES INCOMPÉTENT ET C'EST UNE RÉALITÉ, TU N'AS RIEN A FAIRE ICI FAUT S'Y CONNAITRE ... -Jojo1998 - RIP - http://tinyurl.com/qc47ftk
n°2384046
DiB91
Bwaaaaaaah
Posté le 06-05-2021 à 14:35:40  profilanswer
 

Merci beaucoup à vous :jap:


---------------
La DiBerie | Rehost | Link
n°2384047
nucl3arfl0
Better Call Saul
Posté le 06-05-2021 à 14:43:00  profilanswer
 

nucl3arfl0 a écrit :


En fait, ça, ça ne marche pas, car il essaie d'insérer l'objet State dans la table MyEntityState alors que je ne veux que l'ID dans la table MyEntity
 
J'ai regardé du côté de Value Object et la méthode OwnsOne, mais je ne crois pas que ça réponde exactement à mon cas (à mon avis, soit j'ai mal modélisé mon truc, soit j'approche le problème de la mauvaise manière)


 
Pour info, j'ai trouvé, il fallait que je fasse ça :
 

Code :
  1. myEntityConfiguration.Property(entity=> entity.State)
  2.      .HasConversion(myEntityStateValueConverter)
  3.      .HasColumnName("MyEntityStateId" )
  4.      .IsRequired();


 
Avec un convertisseur :

Code :
  1. var myEntityStateValueConverter= new ValueConverter<MyEntityState, int>(
  2.                 v => v.Id,
  3.                 v => MyEntityState.From(v)
  4.              );


 
MyEntityState.From c'est juste un factory qui renvoie une instance avec le bon couple "id/valeur".

n°2384060
nucl3arfl0
Better Call Saul
Posté le 06-05-2021 à 15:51:23  profilanswer
 

Tiens, question suivante (les exemples ci-dessous sont fictifs).
Je fais actuellement une approche DDD et CQRS.
Je suis en train de mettre en place des tests unitaires et j'utilise le framework Moq.
 
Seulement je suis confronté à un souci pour lequel je cherche à savoir quelle serait la bonne stratégie.
Je m'explique.
J'ai un agrégat racine qu'on va appeler Root pour rester simple.
Cet agrégat a un état sous forme de Value Object, on l'appellera State.
Root -> State
 
Quand je crée cet agrégat, il a un état initialisé à "Created".
 
Actuellement, je suis en train de développer une nouvelle commande, qui va déclencher le changement d'état.
En gros, je vais avoir une commande RunCommand, qui va ensuite appeler la méthode Run de Root.
Quand cette méthode est appelée, State passe à "Running".
Bon jusque là, c'est facile à tester.
 
Là où ça se complique, c'est qu'il existe un état à "Archived", pour lequel la commande Run ne doit pas être possible.
Je cherche donc à initialiser/mocker mon agrégat avec ce fameux statut (qui n'est pas modifiable publiquement).
 
Je voix deux stratégies, mais elles ne me conviennent pas :
1/
- je connais le périmètre méthode de l'action Run
- je ne connais pas encore le périmètre de l'action Archive
 
En ce sens, je ne me vois pas développer une méthode exprès pour changer le statut, puis l'appeler au niveau de l'agrégat racine avant d'exécuter run..
 
2/  
- j'implémente une interface sur ma classe Root qui permet au proxy de modifier la valeur
 
En ce sens, ça me fait chier de mettre en place une interface juste pour mocker.
 
Est-ce qu'il existe une autre alternative ?
 
(J'espère avoir été clair).
 
 
 
 
 
 

n°2384145
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 07-05-2021 à 09:24:15  profilanswer
 

Bin à l'origine, comment cet état Archived est-il setté ?


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°2384146
DiB91
Bwaaaaaaah
Posté le 07-05-2021 à 09:25:40  profilanswer
 

Les gars, pardon de couper la parole comme ça brutalement, mais vous rencontrez aussi de GROS ralentissements avec Visual Studio 2019 depuis la dernière mise à jour (16.9.4 chez moi) :??:
 
Depuis quelques jours, l'IDE semble faire des pauses :ouch:
Par exemple : je tape mon code, et l'intellisense ne me propose rien. Je tape "//" pour commenter une ligne, le texte met 12 secondes à passer en vert :ouch:
La compilation de ma solution actuelle (11 projets) est passée de quelques secondes à plus de 2 minutes là, pour la dernière :??:


---------------
La DiBerie | Rehost | Link
n°2384147
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 07-05-2021 à 09:26:33  profilanswer
 

Non, rien de tel chez moi (j'ai mis à jour y a 1 semaine environ et j'ai codé avec toute la semaine).
Réinstalle peut-être ?


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°2384148
nucl3arfl0
Better Call Saul
Posté le 07-05-2021 à 09:27:14  profilanswer
 

Par une méthode Archive() de mon agrégat.
J'ai fouillé un peu, visiblement, c'est pas choquant de faire une suite d'action pour tester ensuite la méthode dans l'état souhaité.
Par contre ça c'est plus du test unitaire mais du test d'intégration à mon sens.
Ce qui m'embête c'est que je connais pas encore la logique de cette méthode, donc juste l'écrire pour dire que l'état est mis à archived, bof bof.

n°2384149
DiB91
Bwaaaaaaah
Posté le 07-05-2021 à 09:27:30  profilanswer
 

Ouais je pense que je vais pas y couper en effet.
C'est parti.
 
Merci pour ta réponse :jap:


---------------
La DiBerie | Rehost | Link
n°2384150
nucl3arfl0
Better Call Saul
Posté le 07-05-2021 à 09:28:12  profilanswer
 

DiB91 a écrit :

Les gars, pardon de couper la parole comme ça brutalement, mais vous rencontrez aussi de GROS ralentissements avec Visual Studio 2019 depuis la dernière mise à jour (16.9.4 chez moi) :??:
 
Depuis quelques jours, l'IDE semble faire des pauses :ouch:
Par exemple : je tape mon code, et l'intellisense ne me propose rien. Je tape "//" pour commenter une ligne, le texte met 12 secondes à passer en vert :ouch:
La compilation de ma solution actuelle (11 projets) est passée de quelques secondes à plus de 2 minutes là, pour la dernière :??:


Je trouve que mon intelliSense n'est pas super réactif, notamment pour les suggestions de refacto ou d'encapsulage.

n°2384152
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 07-05-2021 à 09:33:01  profilanswer
 

nucl3arfl0 a écrit :

Par une méthode Archive() de mon agrégat.
J'ai fouillé un peu, visiblement, c'est pas choquant de faire une suite d'action pour tester ensuite la méthode dans l'état souhaité.
Par contre ça c'est plus du test unitaire mais du test d'intégration à mon sens.
Ce qui m'embête c'est que je connais pas encore la logique de cette méthode, donc juste l'écrire pour dire que l'état est mis à archived, bof bof.


Ba c'est pas grave au contraire. Tu codes le test en fonction de ce que tu veux que ça fasse et tu coderas l'implem ensuite. Approche TDD, etc...
Faut pas rester dans le dogme du TU et dela pyramide de tests. Tu veux tester un comportement de ton appli, go. Idéalement tu fais un truc qui s'exécutera rapidement et sans trop d'effets de bord, donc t'évites les les I/O réseau/disque, mais partir d'une couche assez haute pour tester tout une pile de code me semble au contraire une meilleure approche que de tester chaque composant en isolation. Sur nos projets au taf, on code nettement plus de tests d'acceptance que de TU. Par exemple pour une API, on part du controller, on stubbe/mocke les accès base et on voit le retour à l'appel du controller. Sur des projets conséquents, la plomberie pour tester correctement peut être conséquente mais ça nous donne une meilleure vision de comment se comporte le code quand il est utilisé dans des conditions véritables et surtout de bien piger les problèmes d'archi ("mais putain pourquoi ça a été fait comme ça, ce truc ?" [:dawao]).

 

EDIT : un article sur le sujet par un gars avec qui je bosse en ce moment : https://tpierrain.blogspot.com/2021 [...] -made.html

Message cité 1 fois
Message édité par Taiche le 07-05-2021 à 09:34:17

---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°2384153
DiB91
Bwaaaaaaah
Posté le 07-05-2021 à 09:33:41  profilanswer
 

Ouais ça a jamais été foufou je trouve depuis quelques années.
Disons depuis leur service d'IA là, qui classe les résultats pour coller au contexte.
 
Mais là, c'est chaud, je viens d'essayer "string toto = string." et la liste a mis au moins 30 secondes à s'afficher.
 
Bon, je réinstalle :o


---------------
La DiBerie | Rehost | Link
n°2384176
nucl3arfl0
Better Call Saul
Posté le 07-05-2021 à 11:07:54  profilanswer
 

Taiche a écrit :


Ba c'est pas grave au contraire. Tu codes le test en fonction de ce que tu veux que ça fasse et tu coderas l'implem ensuite. Approche TDD, etc...
Faut pas rester dans le dogme du TU et dela pyramide de tests. Tu veux tester un comportement de ton appli, go. Idéalement tu fais un truc qui s'exécutera rapidement et sans trop d'effets de bord, donc t'évites les les I/O réseau/disque, mais partir d'une couche assez haute pour tester tout une pile de code me semble au contraire une meilleure approche que de tester chaque composant en isolation. Sur nos projets au taf, on code nettement plus de tests d'acceptance que de TU. Par exemple pour une API, on part du controller, on stubbe/mocke les accès base et on voit le retour à l'appel du controller. Sur des projets conséquents, la plomberie pour tester correctement peut être conséquente mais ça nous donne une meilleure vision de comment se comporte le code quand il est utilisé dans des conditions véritables et surtout de bien piger les problèmes d'archi ("mais putain pourquoi ça a été fait comme ça, ce truc ?" [:dawao]).

 

EDIT : un article sur le sujet par un gars avec qui je bosse en ce moment : https://tpierrain.blogspot.com/2021 [...] -made.html


Ah tu connais Thomas :D

 

Alors je fais la même approche, et selon les projets, je fais même des tests qui teste l'état d'un système à partir d'une représentation de celui-ci (j'ai perdu le nom de la méthodo, j'ai un trou de mémoire).
L'idée, tu convertis ton système en fichier texte qui représente son état.
Puis ensuite tu modélises son état n+1 ou n+m et tu fais des tests dessus.
C'est pratique quand tu veux tester en boite noire.


Message édité par nucl3arfl0 le 07-05-2021 à 11:08:08
n°2384445
TotalRecal​l
Posté le 08-05-2021 à 08:18:55  profilanswer
 

DiB91 a écrit :


 
Merci bcp pour ta réponse :) :love:
 
...
 
Tu me confirmes que ce scaffolding gère les mises à jour de structure de la base de données ?
Genre si je transforme une PK en INT -> BIGINT il saura me transformer la propriété  int32 > long, sans que je doive tout péter et refaire de zéro ?
J'ai vu que ça gère très bien les relations 1-n aussi, là où j'ai parfois eu des surprises avec EF 4 par le passé.
...


 
Je pige pas le problème ? La commande scaffolding régénère toutes les classes, donc le moindre changement de type ou de structure sera répercuté sans souci. De ce point de vue c'est plus pratique que l'EDMX qui avait tendance à gueuler ou générer des trucs foireux quand quelque chose qui existe changeait.
 
Là où l'EF Core est plus problématique, c'est si tu as besoin de générer des classes qui ne soient pas le reflet direct de la structure de la base (genre ajouter un suffixe aux classes, etc).  
Il y a cependant des solutions en code et même de très bonnes, dans le temps ça passait par IDesignTimeServices.
Si tu veux avoir des templates plus poussés y a ce genre de choses : https://github.com/TrackableEntitie [...] /issues/34
Je viens de découvrir cet article qui a l'air pas mal pour découvrir le scaffolding : https://www.softfluent.fr/blog/ef-c [...] enere-3-4/


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2384446
TotalRecal​l
Posté le 08-05-2021 à 08:27:14  profilanswer
 

DiB91 a écrit :

 

Par exemple : j'ai toujours évité await/async dont la syntaxe me donne des boutons... là, y a plus trop le choix vu que les templates par défaut sont écrites avec ces concepts là (et c'est très bien !).

 


 

await/async j'ai eu du mal aussi, surtout dans des contextes où je ne vois pas trop le bénéfice. Maintenant j'en mets partout mais je ne suis pas devenu fan pour autant.

 

- Les signatures de méthodes sont plus lourdes
public async Task<Truc> MethodAsync()
C'est plus long que
public Truc Method()
T'as vite fait d'oublier un "async" ou "Async" au milieu.
Et du coup dans tous tes appels tu as des await ...Async en plus (si tu suis cette convention)

 

- Quand tu commences à avoir rien qu'un ou deux morceaux async, c'est tout le code qui potentiellement va vouloir le devenir aussi donc tu finis par (devoir) en mettre partout.

 

- Je me suis déjà interrogé sur le comportement dans certains cas.

 

Par exemple j'ai ça :

 
Code :
  1. string cleObjet = objet.Cle;
  2. await VerrouillerLaccesAMonObjet(cleObjet);
  3. await FaireUnTrucSurLobjet(objet);
 

Je me demande si j'ai bien la garantie que "FaireUnTruc" a besoin du même objet que "Verrouiller", et si il va bien exécuter complètement Verrouiller avant de jouer FaireUnTruc.

 

Bon là l'exemple est basique, mais parfois quand la séquence d'exécution de plusieurs méthodes async est critique et que les dépendances entre elles ne sont pas évidentes, je me demande comment le machin décide.

Message cité 2 fois
Message édité par TotalRecall le 08-05-2021 à 08:29:20

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2384447
TotalRecal​l
Posté le 08-05-2021 à 08:36:41  profilanswer
 

C'est pas vraiment que du .Net mais y a des gens qui s'y connaissent en web et en authentification Windows qui seraient inspirés là dessus ?
Il y a du sharepoint en bonus :o.
https://stackoverflow.com/questions [...] entication
Perso je suis pas très inspiré dans ces trucs là et là je sèche, tout ce qu'on sait dire c'est "Utilisez Edge" :/.
Merci

Message cité 1 fois
Message édité par TotalRecall le 08-05-2021 à 08:36:57

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2384460
fugacef
Posté le 08-05-2021 à 12:17:32  profilanswer
 

TotalRecall a écrit :


 
await/async j'ai eu du mal aussi, surtout dans des contextes où je ne vois pas trop le bénéfice. Maintenant j'en mets partout mais je ne suis pas devenu fan pour autant.
 
- Les signatures de méthodes sont plus lourdes  
public async Task<Truc> MethodAsync()  
C'est plus long que  
public Truc Method()
T'as vite fait d'oublier un "async" ou "Async" au milieu.  
Et du coup dans tous tes appels tu as des await ...Async en plus (si tu suis cette convention)  
 
- Quand tu commences à avoir rien qu'un ou deux morceaux async, c'est tout le code qui potentiellement va vouloir le devenir aussi donc tu finis par (devoir) en mettre partout.
 
- Je me suis déjà interrogé sur le comportement dans certains cas.
 
Par exemple j'ai ça :
 

Code :
  1. string cleObjet = objet.Cle;
  2. await VerrouillerLaccesAMonObjet(cleObjet);
  3. await FaireUnTrucSurLobjet(objet);


 
Je me demande si j'ai bien la garantie que "FaireUnTruc" a besoin du même objet que "Verrouiller", et si il va bien exécuter complètement Verrouiller avant de jouer FaireUnTruc.
 
Bon là l'exemple est basique, mais parfois quand la séquence d'exécution de plusieurs méthodes async est critique et que les dépendances entre elles ne sont pas évidentes, je me demande comment le machin décide.


J'espère ne pas dire de bêtises, mais await va, comme son nom l'indique, attendre la fin de l'exécution de la fonction. L'intérêt c'est de libérer ton thread pour qu'il aille faire d'autres trucs, mais ça ne va pas lancer en parallèle les deux fonctions. Pour ça il faut une autre syntaxe avec des Task etc

n°2384461
fugacef
Posté le 08-05-2021 à 12:19:05  profilanswer
 

TotalRecall a écrit :

C'est pas vraiment que du .Net mais y a des gens qui s'y connaissent en web et en authentification Windows qui seraient inspirés là dessus ?
Il y a du sharepoint en bonus :o.
https://stackoverflow.com/questions [...] entication
Perso je suis pas très inspiré dans ces trucs là et là je sèche, tout ce qu'on sait dire c'est "Utilisez Edge" :/.  
Merci


Utilise un petit bounty sinon, vu ton total de réput t'as du stock :o  :D

n°2384468
Implosion ​du Sord
Fesseur de chameaux
Posté le 08-05-2021 à 13:13:23  profilanswer
 

TotalRecall a écrit :


- Quand tu commences à avoir rien qu'un ou deux morceaux async, c'est tout le code qui potentiellement va vouloir le devenir aussi donc tu finis par (devoir) en mettre partout.


C'est le principe même : rendre le code asynchrone de bout en bout
 

TotalRecall a écrit :


- Je me suis déjà interrogé sur le comportement dans certains cas.
 
Par exemple j'ai ça :
 

Code :
  1. string cleObjet = objet.Cle;
  2. await VerrouillerLaccesAMonObjet(cleObjet);
  3. await FaireUnTrucSurLobjet(objet);


 
Je me demande si j'ai bien la garantie que "FaireUnTruc" a besoin du même objet que "Verrouiller", et si il va bien exécuter complètement Verrouiller avant de jouer FaireUnTruc.


Asynchrone ne veut pas dire exécution parallèle comme le dit fugacef, mais permet en effet de libérer ton thread appelant pour qu'il puisse exécuter une autre action. Ca permet de libérer ton UI ou traiter d'autres requêtes dans le cas d'une API.
 
Pour une exécution parallèle, il faut sauvegarder les Task retournée par les méthodes dans un IEnumerable<Task> et faire un Task.WhenAll(tonEnumerable)

Code :
  1. string cleObjet = objet.Cle;
  2. var tasks = new List<Task>();
  3. tasks.Add(VerrouillerLaccesAMonObjet(cleObjet));
  4. tasks.Add(FaireUnTrucSurLobjet(objet));
  5. await Task.WhenAll(tasks);


 
Attention, WaitAll n'est pas awaitable, il faut bien utiliser WhenAll. Il existe aussi d'autres méthodes bien utiles tel que WaitAny
Si l'une de tes méthodes retourne un résultat que tu souhaites récupérer, dans ce cas il faut que tu puisses identifier la task associée (créer une variable Task avant de l'ajouter à la liste), puis ré-await la task après le WhenAll

Code :
  1. string cleObjet = objet.Cle;
  2. var tasks = new List<Task>();
  3. tasks.Add(VerrouillerLaccesAMonObjet(cleObjet));
  4. tasks.Add(var t1 = FaireUnTrucSurLobjet(objet));
  5. await Task.WhenAll(tasks);
  6. var result = await t1;


 
async/await n'a d’intérêt que si il y a vraiment du code asynchrone à appeler derrière (accès à une ressource non manager, tel qu'une DB, ou une API)
Un point à ne pas oublier : il est interdit d'avoir un paramètre "out" dans une méthode async. Vous pouvez par contre retourner des Tuples implicites depuis quelques temps (ou créer "bag" à retourner)

Code :
  1. private async Task<(int min, int max)> MyMethod()
  2. {
  3.   // something awaitable....
  4.   return (1, 2);
  5. }


Message édité par Implosion du Sord le 08-05-2021 à 13:21:14

---------------
[VDS]AIO Fractal Design Celsius S36 | Carte Wifi N Intel 5100 mPCIe | divers accessoire boitier Fractal Design | Away from keyboard, close to your breast
n°2384476
Yor_le_Bou​rrin
Posté le 08-05-2021 à 14:09:25  profilanswer
 

+1 à ce qui a été dit avant : await garantit l'ordre. Une autre subtilité : de base tu as la garantie qu'après ton await tu reviens sur le même thread qu'à l'origine. Pour gagner des perfs, si la condition n'est pas nécessaire (typiquement souvent obligatoire en web / wpf), il est possible de faire sauter la condition avec configureAwait(false).

 

Pour la contamination des async, il est toujours possible de faire un Wait pour se rendre compatible avec du code synchrone.

n°2384650
TotalRecal​l
Posté le 10-05-2021 à 12:11:56  profilanswer
 

Pour l'ordre garanti, justement c'est là que je m'interroge, quand tu as plusieurs await à la suite c'est bien sensé parfois pouvoir faire des traitements parallèles, sans passer par Task<>...

 

Le ConfigureAwait(false) fait parti de mes griefs pour ce qui est de la lourdeur de la syntaxe :D.
"await MethodAsync().ConfigureAwait(false);"
Au lieu de
"Method();"
c'est quand même plus long :whistle:
Evidemment par rapport à du code threadé à l'ancienne (quand c'est utile), ça reste super :o

 

Pour le reste je connais bien à force, mais un petit rappel est toujours utile et ça profitera forcément à quelqu'un, merci :jap:

 

edit : par contre pour forcer l'exécution synchrone, je préfère .GetAwaiter().GetResult() que Wait(). Encore un truc plus long à écrire, mais si je me souviens bien les exceptions sont beaucoup plus claires (à vérifier).

Message cité 2 fois
Message édité par TotalRecall le 10-05-2021 à 12:32:22

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2384651
TotalRecal​l
Posté le 10-05-2021 à 12:18:12  profilanswer
 

fugacef a écrit :


Utilise un petit bounty sinon, vu ton total de réput t'as du stock :o  :D


J'hésite. Je me dis que je vais plutôt dire à mon client de se débrouiller avec Microsoft, ils sont sensés avoir du support là-bas :o :p


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2384653
Yor_le_Bou​rrin
Posté le 10-05-2021 à 13:10:11  profilanswer
 

TotalRecall a écrit :

Pour l'ordre garanti, justement c'est là que je m'interroge, quand tu as plusieurs await à la suite c'est bien sensé parfois pouvoir faire des traitements parallèles, sans passer par Task<>...


Non tu ne fais pas await pour un traitement parallèle (genre diviser pour régner). Tu le fais pour suspendre le thread courant sur une tâche asynchrone (typiquement I/O) et donc éviter une attente active et libérer de la place pour les autres threads, tout en limitant la quantité de code à écrire. En interne au niveau compilation ça doit se traduire par un thread.Join avant de reprendre la suite (à vérifier, je suis sur tel).

n°2384739
Implosion ​du Sord
Fesseur de chameaux
Posté le 10-05-2021 à 22:53:47  profilanswer
 

TotalRecall a écrit :

Pour l'ordre garanti, justement c'est là que je m'interroge, quand tu as plusieurs await à la suite c'est bien sensé parfois pouvoir faire des traitements parallèles, sans passer par Task<>...


Non, c'est séquentiel, prédictif.

TotalRecall a écrit :


Le ConfigureAwait(false) fait parti de mes griefs pour ce qui est de la lourdeur de la syntaxe :D.
"await MethodAsync().ConfigureAwait(false);"
Au lieu de
"Method();"
c'est quand même plus long :whistle:
Evidemment par rapport à du code threadé à l'ancienne (quand c'est utile), ça reste super :o

 

Pour le reste je connais bien à force, mais un petit rappel est toujours utile et ça profitera forcément à quelqu'un, merci :jap:

 

edit : par contre pour forcer l'exécution synchrone, je préfère .GetAwaiter().GetResult() que Wait(). Encore un truc plus long à écrire, mais si je me souviens bien les exceptions sont beaucoup plus claires (à vérifier).


Le ConfigureAwait n'a plus aucune impact en .Net Core. Pour le reste, je n'ai pas de souvenir où ça avait vraiment une impact sur les perfs, a part des effets négatifs en cas d'utilisation d'ORM... mais les ORMs c'est pourris de toute façons :o


---------------
[VDS]AIO Fractal Design Celsius S36 | Carte Wifi N Intel 5100 mPCIe | divers accessoire boitier Fractal Design | Away from keyboard, close to your breast
n°2384745
Yor_le_Bou​rrin
Posté le 11-05-2021 à 09:10:32  profilanswer
 

Par défaut (sans appel de la méthode), configureAwait est à true. Tu n'auras pas de grosses différences de perf en le passant à false, mais par contre tu t'exposes à des bugs, notamment en wpf et ASP.net. Il me semble que la reco c'est de ne pas y toucher dans les applis, seulement dans les DLL

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  69  70  71  ..  75  76  77  78  79  80

Aller à :
Ajouter une réponse
 

Sujets relatifs
service web REST en VB.NET HeySpreadRequete Access avec paramètres, éxécutée en VB .Net
impersonalisation sous ASP.NET[Topic Unique] les blagues pourries de harko et florentg
Generation d'un GIF en ASP.NETAppeler un service web .NET sécurisé en Java
Prog Visual Basic "periodicité"[Oracle] Temps d'execution de requete tres long par rapport au .NET
[VB.NET] Lister des imprimantes réseauxFusion de résultats de requêtes dans une unique Table
Plus de sujets relatifs à : [Topic unique] .Net @ Prog


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR