2016-04-27 14 views
0

ich einige Tabellen zu verwenden, um anzugeben Standard E-Mail-Nachrichten und die Adressen, von denen aus sie gesendet werden:die Spalte angeben, wenn

Email.Message 
------------- 
MessageId 
Name 
FromAddressId 

Email.Address 
------------- 
AddressId 

Diese Tabellen werden modelliert in Code verwenden diese Klassen:

public class EmailAddress 
{ 
    public int AddressId { get; set; } 
} 

public class EmailMessage 
{ 
    public int MessageId { get; set; } 
    public string Name { get; set; } 
    public int FromAddressId { get; set; } 
    public virtual EmailAddress FromAddress { get; set; } 
} 

var message = Db.EmailMessages 
       .Where(m => m.Name == name) 
       .Include(m => m.FromAddress) 
       .SingleOrDefault(); 

ich bin mit Fluent API, um die Beziehung zu spezifizieren:

internal class EmailMessageMap : EntityTypeConfiguration<EmailMessage> 
{ 
    public EmailMessageMap() 
    { 
     ToTable("Message", "Email"); 
     HasKey(p => p.MessageId); 
     // What do I put here? 
    } 
} 

Wie kann ich die zu u einrichten beitreten se die FromAddressId meiner EmailMessage Klasse? Ich habe diese Optionen ausprobiert:

HasRequired(p => p.FromAddress).WithRequiredPrincipal(); // uses LEFT OUTER JOIN 
HasRequired(p => p.FromAddress).WithRequiredDependent(); // uses INNER JOIN 

Diese verursachen die SQL, die entweder ein LEFT OUTER JOIN oder ein INNER JOIN erstellt wird, aber sie versuchen, immer Message.MessageId zu Address.AddressId zu verbinden, was falsch ist. Wie kann ich es die richtige Spalte machen verwenden (FromAddressId)? Ich brauche etwas zu haben, das // What do I put here?, zu ersetzen, da sonst ich die folgende Ausnahme erhalten:

Ungültiger Spaltenname ‚FromAddress_AddressId‘

EDIT: ich eine [ForeignKey("FromAddressId")] auf dem FromAddress platzieren Eigenschaft und es funktioniert:

[Extent1].[FromAddressId] = [Extent2].[AddressId] 

Fortschritt! Nun, wie kann ich tun dies in Fluent API?

Antwort

1

Nun, wie kann ich tun dies in Fluent API?

HasRequired(p => p.FromAddress) 
.WithMany() 
.HasForeignKey(p => p.FromAddressId); 
+0

Das hat funktioniert! Vielen Dank! – zimdanen

Verwandte Themen