2009-09-28 12 views

Répondre

1

Des choses comme "MS_Description" etc? Pas AFAIK; vous pourriez écrire un SP qui parle au magasin à la base de données (en prenant le nom de l'objet et le nom de la colonne), et interroger via le contexte de données - mais rien intégré.

Il serait également très facile d'écrire un code qui utilise Expression pour obtenir les noms de base de données (au lieu des noms OO) de passer quelque chose comme:

public static string GetProperty<TContext, TValue>(
     this TContext ctx, Expression<Func<TContext, TValue>> selector, 
     string propertyName) 
     where TContext : DataContext 
    { 
     MemberExpression me = selector.Body as MemberExpression; 
     if (me == null) throw new InvalidOperationException(); 
     var member = me.Member; 
     var objType = me.Expression.Type; 
     var metaType = ctx.Mapping.GetMetaType(objType); 
     string tableName = metaType.Table.TableName; 
     string columnName = metaType.GetDataMember(member).MappedName; 

     return ctx.GetProperty(tableName, columnName, propertyName); 
    } 

(ou quelque chose de similaire, mise à feu juste un test de db ...)

. Où vous fournissez la méthode GetProperty via un SPROC mappé.

Mise à jour: oui, ça marche un peu; exemple:

string desc = ctx.GetProperty(x => x. DataChanges.First().Change, "MS_Description"); 

Le First() est une douleur, mais moins laid que d'avoir à disposer de deux sélecteurs; il pourrait être réécrite de cette façon, si:

string desc = ctx.GetProperty(x => x.DataChanges, dc => dc.Change, "MS_Description"); 

Jusqu'à vous qui est moins aki. Notez également que vous devez diviser le propriétaire sur tableName.

+0

Que voulez-vous dire par les utilisations d'expression? – Grant

0

De quelle manière souhaitez-vous y accéder? Mon complément L2S pour VS 2008 peut les transformer en commentaires xml doc (donc ils apparaissent dans VS intellisense), et en attributs de description [auxquels vous pouvez accéder depuis le code]. Voir la fonction 'mettre à jour la documentation depuis la base de données' à http://www.huagati.com/dbmltools/ ...

0

Vous pouvez créer une vue dans votre base de données en sélectionnant toutes les informations dont vous avez besoin dans les vues sys - en commençant par la vue sys.extended_properties (dans SQL2005 et versions ultérieures) et en rejoignant d'autres au besoin (sys.tables et sys.all_columns dans votre cas je pense). Ensuite, il suffit d'importer cette vue dans VS dans votre modèle.

Vous pouvez également utiliser SMO pour accéder à toutes vos métadonnées SQL Server, y compris les propriétés étendues sur les tables, les colonnes, etc. Je crois que ce sera LINQ to Objects. Par ailleurs, il s'agit de la seule méthode portable (à travers les versions de SQL Server) pour interroger ces informations.

http://msdn.microsoft.com/en-us/library/ms162557.aspx