Bonjour,

Je cherche des pistes pour modifier trois fichiers CS par programme.
Au départ j'ai un template T4 qui me génères 3 fichiers à partir du nom d'une table de ma base de données.
Il s'agit d'un vielle version du template POCO generator que j'ai adapté à mes besoins.
https://marketplace.visualstudio.com...ePOCOGenerator

J'ai un premier fichiers qui ressemble à ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    [Table("KUNDE", Schema = "dbo")]
    [System.CodeDom.Compiler.GeneratedCode("EF.Reverse.POCO.Generator", "2.36.1.0")]
    public class Kunde : Entity
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        [Column(@"K_Code", Order = 1, TypeName = "varchar")]
        [Index(@"K_Code", 2, IsUnique = true, IsClustered = false)]
        [MaxLength(17)]
        [StringLength(17)]
        [Key]
        [Display(Name = "Code")]
        public string Code { get; set; }
 
        [NotMapped]
        [Column(@"K_Vorname", Order = 2, TypeName = "varchar")]
        [Index(@"K_Vorname", 1, IsUnique = false, IsClustered = false)]
        [MaxLength(35)]
        [StringLength(35)]
        [Display(Name = "Vorname")]
        public string Vorname { get; set; }
 
        [NotMapped]
        [Column(@"K_Anderungsdatum", Order = 3, TypeName = "datetime")]
        [Display(Name = "Änderungsdatum")]
        public System.DateTime Anderungsdatum { get; set; }
}
Où l'objectif est le suivant :
- repérer l'attribut Column portant le nom d'une colonne en particulier (exemple K_Vorname)
- enlever l'attribut NotMapped sur la propriété correspondante
- changer le nom de la propriété en FirstName

Un deuxième qui ressemble à ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    [System.CodeDom.Compiler.GeneratedCode("EF.Reverse.POCO.Generator", "2.36.1.0")]
    public class Kunde Configuration : System.Data.Entity.ModelConfiguration.EntityTypeConfiguration<Kunde>
    {
        public KundeConfiguration()
            : this("dbo")
        {
        }
 
        public KundeConfiguration(string schema)
        {
            Property(x => x.Code).IsUnicode(false); // K_Code
            //Property(x => x.Vorname).IsOptional().IsUnicode(false); // K_Vorname
            //Property(x => x.Anderungsdatum).IsOptional(); // K_Anderungsdatum
       }
Où l'objectif est le suivant :
- repérer le commentaire portant le nom d'une colonne en particulier (exemple K_Vorname)
- Enlever le commentaire au début de la ligne
- changer le nom de la propriété en FirstName
- Certaines colonnes notamment celles de type Entier sont potentiellement absentes de ce fichier.

Et le troisième qui ressemble à ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Justification = "They are fields names")]
    public static class KundeTableInformationStore
	{
		/* CA1024 (Design) 
		 * Use property if appropriate */
		public static ODataTableInformationModel TableAndFields
		{
			get { return GetTableAndFields(); }
		}
 
		private static ODataTableInformationModel GetTableAndFields()
		{
			ODataTableInformationModel result = new ODataTableInformationModel()
			{
				Name = "Kunde",
                                InternalName = "KUNDE",
				Description = "Kunden",
				Prefix = "K",
                                Key = "K_Code",
				Fields = GetFieldsOnly()
			};
 
 
			return result;
		}
 
		/* CA1024 (Design) 
		 * Use property if appropriate */
		public static System.Collections.Generic.IEnumerable<ODataFieldInformationModel> Fields
		{
			get { return GetFieldsOnly(); }
		}
 
		private static System.Collections.Generic.IEnumerable<ODataFieldInformationModel> GetFieldsOnly()
		{
			return new System.Collections.Generic.List<ODataFieldInformationModel>()
				{
                    new ODataFieldInformationModel()
                    {
                        TableName = "KUNDE",
                        Name = "Code",
                        InternalName = "K_Code",
                        Description = "Code",
                        DataType = "VARCHAR(17)",
                        Mapped = true
                    },
                    new ODataFieldInformationModel()
					{
						TableName = "KUNDE", 
						Name = "Vorname",
						InternalName = "K_Vorname",
						Description = "Vorname",
						DataType = "VARCHAR(35)"
                    },
					new ODataFieldInformationModel()
					{
						TableName = "KUNDE", 
						Name = "Änderungsdatum",
						InternalName = "K_Anderungsdatum",
						Description = "Änderungsdatum",
						DataType = "DATE"
                    },
            }
      }
Où l'objectif est le suivant :
-Changer la valeur de la propriété Name en mettant "Customer" dans l'objet ODataTableInformationModel utilisé dans GetTableAndFields
- idem pour la propriété Description où il faut mettre "Customers"
-Changer la valeur de la propriété Name en mettant "FirstName" dans l'objet ODataFieldInformationModel utilisé dans GetFieldsOnly
- idem pour la propriété Description où il faut mettre "First Name"
- Ajouter une propriété Mapped avec la valeur true

Aujourd'hui je dois faire tous ces changements à la main et pas uniquement pour une seule colonne mais plusieurs dizaines réparties dans plusieurs tables
C'est un processus long et source d'erreurs et j'aimerai l'automatiser.
Existe-il un librairie me permettant de faire simplement et surtout automatiquement ces modifications ?

Merci.