7
votes

Plusieurs clés étrangères à la même table

J'ai une table de référence avec toutes sortes de données de recherche à valeur contrôlée pour le sexe, le type d'adresse, le type de contact, etc. De nombreuses tables ont plusieurs clés étrangères sur cette table de référence

J'ai aussi des tables d'association plusieurs à plusieurs qui ont deux clés étrangères à la même table. Malheureusement, lorsque ces tables sont tirées dans un modèle LINQ et que le DBML est généré, SQLMetal ne considère pas les noms des colonnes de clé étrangère, ni les noms des contraintes, mais uniquement à la table cible. Donc, je finis avec des membres appelés référence1, référence2, ... pas très bien entretien. Exemple: P>

  <Association Name="tb_reference_tb_account" Member="tb_reference" <======
  ThisKey="shipping_preference_type_id" OtherKey="id" Type="tb_reference"
  IsForeignKey="true" />
  <Association Name="tb_reference_tb_account1" Member="tb_reference1" <======
  ThisKey="status_type_id" OtherKey="id" Type="tb_reference" 
  IsForeignKey="true" />


1 commentaires

4 Réponses :


2
votes

L'outil actuel MS Outillage pour Linq est une partie limitée et il ne ressemble pas vraiment beaucoup d'efforts pour VS 2010. Vous pouvez écrire votre propre générateur de code, regarder Modèles T4 de Damien ou PLINQO . J'ai également trouvé EDMDESIgner qui pourrait valoir un look.


1 commentaires

Merci pour les liens intéressants. J'ai regardé les deux - les modèles de Damien ne semblent pas faire ce dont j'ai besoin. Plinqo semble être plus configurable, mais nécessite des codesMith, ce qui n'est pas gratuit. Je vais essayer une approche avec des classes partielles ce que l'on expose d'une manière ou d'une autre avec des noms plus significatifs.



3
votes

Alors je suis descendu dans la route des classes partielles. Par exemple, j'ai ajouté le membre suivant pour adresser le premier membre de référence de mon exemple d'origine:

public partial class tb_account
{
    public tb_reference shipping_preference_reference
    {
        get
        {
            return this._tb_reference.Entity;
        }
        set
        {
            this.tb_reference = value;
        }
    }


0 commentaires

0
votes

Mon XML de SQLMetal avait beaucoup plus de valeurs défauts sensibles. Pas parfait, mais mieux. Le premier FK a obtenu le nom de la table, mais la seconde a obtenu le nom de champ. XXX PRE>

Version SQLMetal: P>

  C:\Program Files\Microsoft Visual Studio 9.0\VC>sqlmetal /?
  Microsoft (R) Database Mapping Generator 2008 version 1.00.21022
  for Microsoft (R) .NET Framework version 3.5
  Copyright (C) Microsoft Corporation. All rights reserved.
  ...


0 commentaires

3
votes

dans VS2010, vous pouvez réellement renommer les propriétés des parents et de l'enfant en vue. C'est un peu caché cependant.

  1. Dans la visionneuse DBML, sélectionnez la relation qui vous dérange.
  2. Dans la grille de propriétés, vous aurez deux lignes de la propriété des enfants et des parents.
  3. Développez-les là-bas, vous pouvez modifier le nom de la propriété

    Plus de détails peuvent être trouvés ici: http://weblogs.asp.net/scottgu/archive/2007/05/29/LINQ-TO-SQL-Part-2-DeFining-our-Data-Model-classes.aspx << / p>

    C'est là que je l'ai eu.


1 commentaires

Vous n'avez pas trouvé pour obtenir les modifications pour survivre à une autre mise à jour de l'aller-retour de la base de données :(