EF Code First Fluent API指定外键属性

时间:2013-10-14 11:51:12

标签: entity-framework ef-code-first

我有一个AgentBalance类,它与Agent有关联,因此:

public class AgentBalance
{
    ...

    public int AgentId { get; set; }

    public virtual Agent Agent { get; set; }

}

按惯例,AgentId被检测为代理关系的FK,但我希望在Mapping类中将其显式化,以便对将来的更改更安全。如果Agent有一系列余额,那么我知道如何做到这一点,例如:

HasRequired(t => t.Agent).WithMany(a => a.Balances).HasForeignKey(t => t.AgentId);

但是,代理商没有拥有余额集合 - 我不希望该关联可以反向导航。但是如果没有映射中的.WithMany,我就无法选择指定.HasForeignKey。还有另外一种方法吗? (N.B.我知道我也可以使用属性来做这个,但我想使用流畅的API映射)。

2 个答案:

答案 0 :(得分:62)

我相信你应该能够做到这一点:

HasRequired(t => t.Agent).WithMany().HasForeignKey(t => t.AgentId)

答案 1 :(得分:2)

我更喜欢使用Data Annotations来完成这些任务,而不是Fluent API。它简单易懂,易于理解。 EF必须检测以" Id"自动,但为了安全起见,您可以明确指定它们:

using System.ComponentModel.DataAnnotations.Schema;
...
public int AgentId { get; set; }

[ForeignKey("AgentId")]
public virtual Agent Agent { get; set; }

如果您的FK道具未以" Id"结束,您将需要明确指定它们,例如:

public int AgentCode { get; set; }

[ForeignKey("AgentCode")] // now this is needed if you'd like to have FK created
public virtual Agent Agent { get; set; }

您可以在此处找到更多详细信息:https://msdn.microsoft.com/en-us/data/jj591583.aspx