2013-01-14 5 views
0

J'ai régulièrement la structure suivante:code EF Première: One-to-One sens unique relation

MyClass 
public virtual ICollection<Version> Versions { get; set; } 
public virtual Version CurrentVersion { get; set; } 

C'est, il y a une liste de choses, et une classe ces deux points à cette liste, et un élément spécifique dans cette liste - soit la version actuelle de nombreuses versions, le prochain événement à venir dans une liste d'événements, etc.

Dans mon schéma, ce que je voudrais terminer est une clé étrangère pointant vers la version à MyClass - cela fonctionne bien. Mais alors je voudrais qu'une clé étrangère pointe de MyClass vers Version représentant la propriété CurrentVersion, sans clé étrangère pointant vers l'arrière - je ne veux pas le stockage supplémentaire ou la peine de dire à une Version quelle MyClass est la CurrentVersion, le cas échéant. En d'autres termes, j'aimerais que cette deuxième relation soit à sens unique de MyClass à Version, même si elle est en tête-à-tête. Ce que le code EF First me donne à la place est le one-to-many normal sur la première propriété, avec le FK de Version à MyClass, mais ensuite une relation complète one-to-one sur la deuxième propriété avec un pointage FK dans les deux directions - le schéma sous-jacent pour Version se termine par MyClass_Id et MyClass_Id1. Donc, y a-t-il un moyen d'obtenir une relation unidirectionnelle dans le code EF First sans avoir recours à l'API Fluent? On aurait dit que System.ComponentModel.DataAnnotations.Schema.InverseProperty avait peut-être une chance de le faire, mais cela ne semblait pas offrir un moyen de dire «n'en générez pas un».

Répondre

0

La clé consiste à spécifier la propriété InverseProperty sur la propriété qui pointe vers l'arrière, de sorte qu'EF se rende compte qu'il s'agit de la propriété Many-to-Many, et non de One-to-One.

public class MyClass 
{ 
    public int Id { get; set; } 

    public Version CurrentVersion { get; set; } 

    public ICollection<Version> Versions { get; set; } 
} 

public class Version 
{ 
    public int Id { get; set; } 

    [InverseProperty("Versions")] 
    public Versioned Versioned { get; set; } 
} 
+0

Pouvez-vous s'il vous plaît me dire comment puis-je le faire avec l'API api? –

+0

@ahmadalishafiee Probablement le meilleur comme sa propre question –

Questions connexes