2009-12-19 6 views
1

J'ai un mappage Linq-To-SQL entre les classes POCO et ma base de données. Je veux pouvoir ajouter des propriétés sur mes classes qui représentent des constructions légèrement plus complexes que de simples valeurs de scalr. Par exemple, j'ai un type struct personnalisé qui contient deux valeurs scalaires simples. Je ne veux pas faire une autre table et ajouter un FK comme propriété. Est-il possible de mapper les propriétés de cette structure en utilisant le fichier de mapping XML Linq-to-Sql?Comment aplatir les mappages de tables Linq-To-Sql?

Par exemple,

public class Foo 
{ 
    public string Blah { get; set; } 
    public Bar Yada { get; set; } 
} 

public struct Bar 
{ 
    public int A { get; set; } 
    public int B { get; set; } 
} 

Comment pourrais-je préciser que Blah, Yada.A et Yada.B sont tous persista sous forme de colonnes sur la table Foo?

Est-ce que cela peut même être fait?

Répondre

1

Ceci est vraiment boiteux, mais il semble que ce devrait être ce que je dois faire si je reste avec L2S.

public class Foo 
{ 
    public string Blah { get; set; } 

    public int Bar_A { get; set; } 
    public int Bar_B { get; set; } 

    /* not mapped to DB */ 
    public Bar Yada 
    { 
     get { return new Bar { A = this.Bar_A, B = this.Bar_B }; } 
     set { this.Bar_A = value.A; this.Bar_B = value.B; } 
    } 
} 

public struct Bar 
{ 
    public int A { get; set; } 
    public int B { get; set; } 
} 

Bien sûr, dans le code réel, je serais probablement fais de telle sorte qu'il ne crée pas la valeur encore et parce que mon type réel Bar a plus à ce que contenant simplement les valeurs.

1

Je pense que Entity Framework dans .NET4 est requis pour cela. Voir this blog post sur les types complexes et les entités.

+0

Merci pour le conseil. J'espère vraiment rester avec LINQ-to-SQL pour cette petite application. Si je sautais à EF, je devrais vraiment prendre du recul et regarder NHibernate et d'autres aussi. – mckamey