Question

Suite à un SO dicsussion ici , je l'ai mis en place des classes partielles de manière à créer par défaut datetime valeurs pour mes champs de base de données créés et modifiés d'un constructeur.

Maintenant, le problème est que ma base de données a plus de 100 tables et 75+ d'entre eux ont la même structure de base qui comprend une création et une définition de colonne modifiée.

.. Au lieu de créer plus de 75 classes partielles que je dois maintenir, est-il possible que je peux créer une classe de base qui tous les types EF hérite de, qui hérite du constructeur par défaut pour remplir les valeurs DateTime pour créer et modifier ?

EDIT: Il convient de noter est que j'utilise EF 4.0

Était-ce utile?

La solution

Vous pouvez certainement spécifier votre propre classe de base avec les deux EF4 et EF1, mais il est beaucoup plus facile avec EF4. Faites un clic droit sur la surface de conception et vous devriez voir une option pour ajouter un élément de génération de code. Sélectionnez le générateur d'objets d'entité ADO.Net. Cela un fichier T4 à votre projet (extension .tt) qui spécifie le modèle à utiliser pour générer vos classes d'entités du modèle. Pour spécifier une autre classe de base, regarder à l'intérieur pour une ligne comme

Private Function BaseTypeName(ByVal entity As EntityType, ByVal code As CodeGenerationTools) As String
    Return If(entity.BaseType Is Nothing, "EntityObject", MultiSchemaEscape(DirectCast(entity.BaseType, StructuralType), code))
End Function

Remplacez EntityObject avec votre classe de base. Notez que si vous utilisez ce modèle, votre classe de base doit hériter de System.Data.Objects.DataClasses.EntityObject -. Vous pouvez utiliser un modèle poco à la place, mais ce sera probablement suffisant pour vous

Autres conseils

Vous pouvez certainement dire EF d'utiliser une classe de base pour vos entités (il est juste dans le concepteur comme une propriété de l'entité) ... mais si vous voulez vous assurer de la valeur par défaut pour ce champ, peut-être que vous pourriez crochet dans les deux événements sur votre ObjectContext SavingChanges et ObjectMaterialized.

http://msdn.microsoft. com / fr-fr / bibliothèque / system.data.objects.objectcontext.savingchanges.aspx

http://msdn.microsoft. com / fr-fr / bibliothèque / system.data.objects.objectcontext.objectmaterialized.aspx

Vous pouvez utiliser ces possibilités d'injecter la valeur par défaut (s) que vous souhaitez utiliser. Donc, dans votre gestionnaire de SavingChanges, par exemple, vous pouvez vérifier l'ObjectStateManager du contexte pour voir si l'état de l'entité concernée est EntityState.Added, puis définissez les dates création et de modification comme on le souhaite.

Sinon, comme l'a suggéré, est-il une raison pour laquelle la valeur par défaut de la colonne dans SQL Server ne peut pas être juste GetDate ()? (En supposant que vous utilisez SQL Server) ....

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top