J'utilise EF 5.0 pour générer des entités de POCO et l'utiliser dans une couche d'accès à des données séparées p>
Je veux étiqueter toutes les entités [Serializable] P>
Comment modifier le modèle pour ajouter un attribut sérialisable? P>
6 Réponses :
Voici les étapes à suivre:
1) Ouvrez le fichier ModelName.Enty.tt P>
2) Localisez la chaîne suivante dans ce fichier P>
[Serializable] <#=Accessibility.ForType(entity)
Si vous ne souhaitez pas modifier le modèle, vous pouvez également le faire dans un fichier de code distinct - en raison de la commodité des classes code> partielle code>. Donc si les types ici sont Ceci sera ensuite fusionné avec la moitié générée, appliquant l'attribut Je devrais cependant vous avertir : FOO code>, bar code> et Baz code> dans le My.Namespace code> Espace de noms, vous pouvez créer un Séparer le fichier em> dans le même projet, avec: [sérialisable] code> . Il vous permettra également d'ajouter vos propres méthodes aux types ou de fournir le corps de tout méthode partielle code> méthode que le modèle déclare. P> [sérialisable] code> suggère que vous utilisez binarinformatter code>; C'est pas em> nécessairement un bon candidat. Il serait préférable de regarder des sérialisés basés sur des contrats. Je serais très surpris si le modèle EF n'avait pas déjà l'option d'attributs de sortie de DatacontractSerializer code> (spécifiquement, [DataContract] [Datamember] code] >). BinaryFormatter Code> peut être très problématique que votre logiciel. p> p>
+1 Pour l'avertissement, merci pour l'approche alternative. Cependant, je trouve difficile d'écrire une ligne par type, je dois également vous rappeler d'ajouter une ligne supplémentaire à chaque fois que j'ajouterai un nouveau type au modèle.
@Imranrizvi Eh bien, puisque vous évidemment i> (toux) ajoutez également de nouveaux tests d'intégration de sérialisation chaque fois que vous ajoutez un type qui doit être sérialisé, il montrera très rapidement quand il y a un problème. Évidemment; P Vous pouvez également ajouter un test qui trouve tous vos types POCO / DTO via une réflexion et vérifie l'attribut / drapeau code> drapeau.
Si vous utilisez l'entité framework 5.0 ou plus Ajouter une balise [Serializable] entre ce code:
<#=codeStringGenerator.UsingDirectives(inHeader: false)#> [Serializable] <#=codeStringGenerator.EntityClassOpening(entity)#>
@nazimhatipoglu, merci. J'ai ajouté [DataContract] dans cette ligne et j'ai ajouté l'attribut à chaque classe. Mais comment utiliser System.Runtime.Sérialisation? Et comment ajouter [Datamember] aux propriétés du modèle?
pour EF 6 Essayez de trouver le code suivant dans Il a un espace porteur de chaîne .tt code> Fichier: ("{0} {1 } Classe partielle {2} {3} ") code> Vous pouvez le changer à ce que vous voulez p> p>
Veuillez vous référer à la façon de répondre sur Stackoverflow.
pour l'entité framework 6, ajoutez sérialisable au-dessus de ces deux parties à MODER.TT
[Serializable] Partial <#=Accessibility.ForType(complex)#> [Serializable] <#=codeStringGenerator.EntityClassOpening(entity)#>
Voici ce que vous faites pour EF 6 (au moins);
dans votre fichier modèle.tt, recherchez ces lignes: p> changez-le à ces : P>
public string EntityClassOpening(EntityType entity)
{
return string.Format(
CultureInfo.InvariantCulture,
"{0} " + Environment.NewLine + " {1} {2} partial class {3}{4}",
"[Serializable]",
Accessibility.ForType(entity),
_code.SpaceAfter(_code.AbstractOption(entity)),
_code.Escape(entity),
_code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)));
}