2016-08-29 4 views
0

ich ein Modell von Arbeit, die ich versuche, eine optionale Job-Umfrage hinzuzufügen:Entity Framework 0: 1-Beziehung wird nicht abgebildet wird

public class Job 
{ 

    [Key] 
    public int JobID { get; set; } 

    // Leaving out all the other fields... 

    public virtual JobSurvey JobSurvey { get; set; } 

} 

Der Job Umfrage Modell sieht wie folgt aus:

public class JobSurvey 
{ 
    [Key] 
    public int JobSurveyId { get; set; } 

    public string CustomerEmail { get; set; } 

    [Index] 
    [Column(TypeName = "Date")] 
    public DateTime? SentDate { get; set; } 

    [Column(TypeName = "Date")] 
    public DateTime? ReturnedDate { get; set; } 

    public int? RatingValue { get; set; } 

    public virtual Job Job { get; set; } 
} 

In meinem Zusammenhang habe ich folgendes hinzugefügt:

modelBuilder.Entity<Job>() 
      .HasOptional(s => s.JobSurvey) 
      .WithRequired(j => j.Job); 

Als ich lief Add-Migration, das Skript die folgenden erstellt:

Mein Problem ist, dass die Tabelle, die erstellt wurde, keine Fremdschlüsseleigenschaft hat, um zu der verwandten Entität wechseln zu können.

In meinem SQL gibt es keine JobSurveyId-Eigenschaft, mit der ich die Umfrage für einen Job abrufen kann, und meine JobSurvey-Tabelle hat keine Navigationseigenschaft, die zum Job zurückführt. So kann ich JobSurveys erstellen, aber sie sind nicht verknüpft.

Was habe ich falsch gemacht?

bearbeiten

Ich habe versucht JobSurvey wie folgt zu ändern:

[Key] 
    [ForeignKey("Job")] 
    public int JobSurveyId { get; set; } 

    public int JobId { get; set; } 

kein Erfolg

Edit 2

auch Haben Sie versucht das Hinzufügen [Erforderlich], um die Navigationseigenschaft, aber add-migration nimmt dies nicht als ac auf hange, die aktualisiert werden muss:

[Required] 
    public virtual Job Job { get; set; } 
+0

Ich glaube, Sie haben nicht die korrekte Schreibweise Ihrer 'Job' Klasse zeigte. Sie initialisieren den Kontext im Modell? deklarierte proeprty im Konstruktor? –

+0

Nein, ich initialisiere die jobsurvey-Eigenschaft im Job-Konstruktor nicht (da JobSurvey null sein kann) – Evonet

+0

korrigiere bitte deine 'Job'-Klasse in der Frage –

Antwort

0

In one-to-one oder Eins-zu-Null oder Eins Beziehungen priamry Schlüssel im abhängigen Modell ist auch Fremdschlüssel Muttermodell. Es besteht keine Notwendigkeit für zusätzliche Fremdschlüssel, da nur eine Daten mit dem übergeordneten verknüpft werden kann, ist es sinnvoll, sie mit ihren IDs zu verknüpfen. Also in Ihrem Fall JobSurveyId innerhalb JobSurvey Modell ist auch Fremdschlüssel zu Job.

public class Job 
{ 
    [Key] 
    public int JobID { get; set; } 

    public virtual JobSurvey JobSurvey { get; set; } 
} 

public class JobSurvey 
{ 
    [Key] 
    public int JobSurveyId { get; set; } // This is also foreign key to Job 

    public virtual Job Job { get; set; } 
} 

Überprüfen Sie unbedingt this site aus.

+0

Danke, aber ich glaube, das ist, was ich bereits habe. – Evonet

+0

Ja, Sie suchen nach foreing key und ich versuche Ihnen zu erklären, dass 'JobSurveyId' ein Fremdschlüssel ist –

+0

In meiner Datenbank gibt es keine Eigenschaft in JobSurvey, die auf den Job verweist – Evonet

1

Da würde ich viel im Kommentar schreiben, versuchen diese, seine nach dem Link, antwortete ich, aber ich glaube nicht, dass Sie es folgte rechts:

public class JobSurvey 
{ 
    [Key] 
    public int JobSurveyId { get; set; } 

    public string CustomerEmail { get; set; } 

    [Index] 
    [Column(TypeName = "Date")] 
    public DateTime? SentDate { get; set; } 

    [Column(TypeName = "Date")] 
    public DateTime? ReturnedDate { get; set; } 

    public int? RatingValue { get; set; } 

    [ForeignKey("Job")] 
    public int JobId { get; set; } 

    public virtual Job Job { get; set; } 
} 

bearbeiten I‘ bin nicht ganz sicher, ob Sie 0 wollen: 1 oder 1: 1 hier sind so alle Möglichkeiten (in Links):

1: 1

Entity Framework 1 to 1 relationship using code first. how?

EF Code-First One-to-one relationship: Multiplicity is not valid in Role * in relationship

0: 1

Is it possible to capture a 0..1 to 0..1 relationship in Entity Framework?

Entity Framework 0..1 to 0 relation

Grundsätzlich könnte dies Ihre Lösung sein:

public class JobSurvey 
{ 
    [Key, ForeignKey("First")] 
    public int JobSurveyId { get; set; } 

    public string CustomerEmail { get; set; } 

    [Index] 
    [Column(TypeName = "Date")] 
    public DateTime? SentDate { get; set; } 

    [Column(TypeName = "Date")] 
    public DateTime? ReturnedDate { get; set; } 

    public int? RatingValue { get; set; } 

    public virtual Job Job { get; set; } 
} 
+0

Bei dieser Vorgehensweise erhalte ich den folgenden Fehler beim Hinzufügen einer Migration: Ein oder mehrere Validierungsfehler wurden während der Modellerstellung festgestellt: JobSurvey_Job_Source:: Die Multiplizität ist in der Rolle 'JobSurvey_Job_Source' in der Beziehung 'JobSurvey_Job' nicht gültig. Da die Eigenschaften der abhängigen Rolle nicht die Schlüsseleigenschaften sind, muss die Obergrenze der Multiplizität der abhängigen Rolle '*' sein. – Evonet

+0

In * eins-zu-eins * Beziehungen ist kein zusätzlicher Fremdschlüssel erforderlich. –

+0

Benötige ich auch den flüssigen API-Eintrag? – Evonet

0

Sie Job-Klasse in Ordnung ist, man muss nur hinzufügen ForeignKey Attribut zu Ihrem JobSurvey auf die korrekte ID-Eigenschaft:

public class Job 
{ 
    [Key] 
    public int JobID { get; set; } 

    public virtual JobSurvey JobSurvey { get; set; } 
} 

public class JobSurvey 
{ 
    [Key, ForeignKey("Job")] 
    public int JobId { get; set; } 
    public Job Job { get; set; } 

    /* other properties */ 
} 
Verwandte Themen