指定加入时要使用的列
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 JOIN
或 INNER 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);
我有一些表格来指定标准的电子邮件消息和它们应该发送的地址:
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 JOIN
或 INNER 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);