2017-09-15 1 views
0

J'ai donc ces modèles:relation Configuration dans le code C# premier

ParentModel.cs

public class ParentModel { 
    ...properties here 

    //relationship to Child 
    [ForeignKey("ChildModelID")] 
    public ChildModel ChildModel { get; set; } 
} 

ChildModel.cs

public class ChildModel{ 
    ...properties here 

    //relationship to parent 
    [ForeignKey("ParentModel")] 
    public int? ParentModelID { get; set; } 
    public ParentModel ParentModel { get; set; } 
} 

J'utilise l'API Web de code premier. Je suis nouveau à cela. Et j'obtiens l'erreur ci-dessous quand la base de données est créée. Mais si je supprime la propriété de navigation dans ParentModel (c'est-à-dire public ChildModel ChildModel { get; set; }), tout fonctionne correctement, sauf que cela ne répond pas à mes besoins. Je veux charger ardemment (ou charge paresseuse ne sachant pas quel terme est exact) le ChildModel quand j'obtiens le ParentModel. La relation ici est Zéro ou One-to-One. Cela signifie que ChildModel peut avoir un enregistrement qui n'a pas de référence dans ParentModel.

Multiplicity is not valid in Role 'ChildModel_ParentModel_Source' in relationship 
'ChildModel_ParentModel'. Because the Dependent Role properties are not the key 
properties, the upper bound of the multiplicity of the Dependent Role must 
be '*'. 

Merci d'avance!

+0

comment supprimer à propos de [ForeignKey ("ChildModelID")] de ParentModel? – yyou

+0

Toujours le même, à l'origine ce code n'était pas là mais une réponse en ligne me l'a suggéré mais ne fonctionne toujours pas. – Jed

+0

Copie possible de [EF6 clé étrangère avec relation un-à-un et navigation de propriété bidirectionnelle] (https://stackoverflow.com/questions/42515355/ef6-foreign-key-with-one-to-one-relationship -et-two-way-property-navigation) –

Répondre

0

Je pense que vous avez mélangé l'attribut ForeignKey. Ne devrait-il pas être sur ParentModel et se référer à ParentModelID?

public class ChildModel 
{ 
    ...properties here 

    //relationship to parent 
    public int? ParentModelID { get; set; } 
    [ForeignKey("ParentModelID")] 
    public ParentModel ParentModel { get; set; } 
} 
+0

Oui, si vous regardez le code ci-dessus, vous remarquerez que j'ai le ForeignKey sur les deux modèles. – Jed

+0

Non, vous n'avez pas. Regardez à nouveau ma réponse. L'attribut est sur une propriété différente –

+0

Ouais je l'ai essayé aussi, toujours la même erreur. – Jed

2

ChildModel et ParentModel est un à zéro/un

MISE À JOUR:

Alors laissez essayer ce code

public class ChildModel 
{ 
    public int Id { get; set; } 
    public ParentModel ParentModel { get; set; } 
} 

public class ParentModel 
{ 
    //[ForeignKey("ChildModel")] 
    //[Key] 
    public int ChildModelId { get; set; } 
    public ChildModel ChildModel { get; set; } 
} 

public class Context : DbContext 
{ 
    public DbSet<ChildModel> ChildModels { get; set; } 
    public DbSet<ParentModel> ParentModels { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<ParentModel>().HasKey(s => s.ChildModelId); 

     modelBuilder.Entity<ParentModel>().HasRequired(s => s.ChildModel).WithOptional(s => s.ParentModel); 
    } 
} 
+0

Cela ne fonctionne toujours pas. Le problème maintenant est que je ne peux pas insérer un enregistrement dans le ChildModel sans le ParentModelID. Pas même quand je mets le ff. code: 'public int? ParentModelID {get; ensemble; } ' – Jed

+0

Aussi, si je supprime l'annotation' [Key] ', cela me donne l'erreur que j'ai mentionnée sur ma question initiale. – Jed

+0

@Jed vous voulez insérer un ChildModel sans ParentModelID? Un enfant sans parent? Est-ce raisonnable? La question: ChildModel et ParentModel qui est principal, qui dépend? –