2009-03-28 5 views
3

Dans mon projet, de nombreuses tables sont liées à la table aspnet_Application par la clé étrangère ApplicationId. Je ne veux pas que les utilisateurs l'affichent ou l'éditent, donc je cherche la manière de prérégler cette valeur de champ de table de sql avant que la requête d'insertion soit exécutée. J'ai toujours l'échafaudage activé pour cette colonne (afin que DD génère le bon script sql) mais je cache cette colonne/ce champ dans toutes mes pages edit/list/insert.Définition de la valeur du champ de service dans Dynamic Data

Idéalement, je cherche un endroit pour injecter mon code juste avant que DynamicInsert soit exécuté pour n'importe quelle table de ma classe LinqToSql.

Merci

Répondre

2

Ainsi, après quelques recherches autour je suis venu avec une solution acceptable. J'ai créé une classe partielle pour mon contexte de données et ajouté une méthode partielle Insert_ pour chaque table liée aux aspnet_Applications. Dans chaque méthode, définissez le champ ApplicationId sur l'ID de l'application actuelle.

Il ressemble à ceci:

public partial class MyDataContext 
{ 
    partial void InsertMyTable(MyTable instance) 
    { 
     instance.ApplicationId = HttpContext.Current.Session["ApplicationId"] as Guid?; 
    this.ExecuteDynamicInsert(instance); 
    } 
} 

Notez que vous ne pouvez pas exécuter d'autres déclarations LINQ alors que dans cette méthode. En particulier, j'ai dû stocker l'identifiant de l'application en session plutôt que d'interroger la table aspnet_Applications.

Bien que ce soit la solution acceptable, il est pas parfait (beaucoup de code répétitif) donc si quelqu'un sait mieux me jeter un os ici :)

0

Dans l'avenir, la meilleure solution serait d'utiliser une partie DomainService .Net services RIA aperçu vient de sortir à MIX09 y voir des vidéos ici:

.NET RIA Services - Building Data-Driven Applications with Microsoft Silverlight and Microsoft ASP.NET

Microsoft ASP.NET 4.0 Data Access: Patterns for Success with Web Forms

Le premier est un Introl à RIA .net Les services du point de vue de Silverlight mais plus appliqué à DD le second est la présentation de David Ebbo au MIX et montre comment DomainService fonctionne avec DD Je pense que c'est la voie à suivre car vous pouvez faire toute votre logique métier dans le DomainService.

Questions connexes