2016-05-31 15 views
1
public class Sale 
{ 
    public int SaleId { get; set; } 
    public Comment Comment { get; set; } 
} 

public class Comment 
{ 
    public int CommentId { get; set; } 
    public int SaleId { get; set; } 

    public Sale Sale { get; set; } 
} 

modelBuilder.Entity<Comment>() 
    .HasRequired(s => s.Sale) 
    .WithMany() 
    .HasForeignKey(s => s.SaleId); 

Und doch, sein es die falsche Art und Weise dazu gekommen ...Wie stellt man das Prinzip für optionale eins-zu-eins mit Fluent API

public override void Up() 
{ 
    AddColumn("public.tbl_sale", "Comment_CommentId", c => c.Long()); 
    AddForeignKey("public.tbl_sale", "Comment_CommentId", "public.tbl_comment", "CommentId"); 
} 

Wie beheben?

Antwort

0

Die Standardmethode zum Modellieren einer solchen Beziehung in EF ist Shared Primary Key Association.

Um das zu tun, entfernen Sie die SaleId aus der Comment Klasse (denken Sie daran - die CommentId sowohl PK und FK sein) die folgende Konfiguration verwenden:

modelBuilder.Entity<Comment>() 
    .HasRequired(c => c.Sale) 
    .WithOptional(s => s.Comment); 
+0

Sie sind beide richtig: Ich habe meine Hand gelöscht Datenbank und überprüfte die Antwort. Danke, dass du mir etwas Neues beigebracht hast. – bwyn

+0

Das macht Sinn. Momentan, wenn ich diesen Builder-Code verwende, wird versucht, die CommentId-Spalte zu löschen und SaleId zum Primärschlüssel hochzustufen! –

+0

Ich denke, mein Datenbankdesign ist SMELLY. –