Deep Clone avec Expression.New et Arbres d'expression

c# deep-copy expression-trees

Question

J'ai deux interfaces IPerson et IAddress .

Cependant, j'ai défini des interfaces de propriété qui héritent de ces interfaces de base

Des interfaces

public interface IPerson_Name : IPerson { String Name{get;set;}}

public interface IPerson_Addresses : IPerson
{
    ICollection<IAddress> Addresses{ get; set; }
    IAddress NewAddress();
}
public interface IAddress_Line1 : IAddress
{
    String Line1 { get; set; }
}

Ensuite, j'ai deux implémentations de chacune des interfaces de base

la mise en oeuvre

public interface IPerson_Name : IPerson { String Name{get;set;}}

public interface IPerson_Addresses : IPerson
{
    ICollection<IAddress> Addresses{ get; set; }
    IAddress NewAddress();
}
public interface IAddress_Line1 : IAddress
{
    String Line1 { get; set; }
}

J'essaie de construire des arbres d'expression pour convertir entre PersonPoco et Person ainsi que tout autre IPerson

Je crée une fonction CopyTo en tant que telle.

Copie extenstion

public interface IPerson_Name : IPerson { String Name{get;set;}}

public interface IPerson_Addresses : IPerson
{
    ICollection<IAddress> Addresses{ get; set; }
    IAddress NewAddress();
}
public interface IAddress_Line1 : IAddress
{
    String Line1 { get; set; }
}

Mon intention est de sauvegarder la sortie compilée pour chaque conversion d'une implémentation à l'autre d'IPerson et d'IAddress.

Si vous voulez plus d'informations sur mes intentions voir cette question

modifier

J'ai copié le paramètre de base dans une nouvelle version. Cela fonctionne jusqu'à présent pour les propriétés de base. J'ai mis à jour le code ci-dessus

Réponse populaire

EDIT: Apparemment, linq aux entités ne peut pas comprendre les appels de méthodes dans ces expressions. donc ce n'est pas une aide.

Voici un résumé

L'interface qui implémente l'interface suivante sera capable de copier les propriétés de leurs interfaces communes.

public interface IEntity
{
}

public interface IEntityObject : IEntity
{
}

public interface IEntityCollection : IEntity
{
}

public interface IEntityProperty : IEntity
{
}

Ensuite, pour chaque propriété d'une entité, vous devez créer une interface.

public interface IEntity
{
}

public interface IEntityObject : IEntity
{
}

public interface IEntityCollection : IEntity
{
}

public interface IEntityProperty : IEntity
{
}

Maintenant si tu le fais

public interface IEntity
{
}

public interface IEntityObject : IEntity
{
}

public interface IEntityCollection : IEntity
{
}

public interface IEntityProperty : IEntity
{
}

Je n'aurai pas encore été appelé avant que cela ne soit énuméré.

De même, si les types génériques partagent des interfaces IEntity, ils seront également copiés.

Pour une mise en œuvre plus complète, voici un autre point essentiel

Voici à quoi ressemblent les cours

public interface IEntity
{
}

public interface IEntityObject : IEntity
{
}

public interface IEntityCollection : IEntity
{
}

public interface IEntityProperty : IEntity
{
}

Voici un fichier de modèle de texte pour générer lesdites classes à partir d'un diagramme EF




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi