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?
Das hat funktioniert! Vielen Dank! – zimdanen