指定加入时要使用的列

Specify the column to use when joining

我有一些表格来指定标准的电子邮件消息和它们应该发送的地址:

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

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

这些表是使用这些 classes:

在代码中建模的
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();

我正在使用 Fluent API 来指定关系:

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

如何设置连接以使用我的 EmailMessage class 的 FromAddressId?我试过这些选项:

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

这些导致创建的 SQL 使用 LEFT OUTER JOININNER JOIN,但它们总是尝试将 Message.MessageId 连接到 Address.AddressId ,这是不正确的。如何让它使用正确的列 (FromAddressId)?我需要一些东西来替换 // What do I put here?,否则我会得到以下异常:

Invalid column name 'FromAddress_AddressId'

编辑: 我可以在 FromAddress 属性 之上放置一个 [ForeignKey("FromAddressId")] 并且它有效:

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

进步了!现在,我如何在 Fluent API 中执行此操作?

Now, how do I do this in Fluent API?

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