与Fluent EF映射1到1的关系

时间:2012-10-19 00:08:53

标签: c# asp.net entity-framework

我希望这会相当直接,但我没有太多运气。我正在使用的数据库有一个用户表和一个用于令牌的表,它们彼此相关,与令牌有一对一的关系,因为我理解为 principal

public class Token
{
    public int ID { get; set; }
    public string Location { get; set; }

    public virtual User Contact { get; set; }
}

public class User
{
    public int ID { get; set; }
    public int TokenID { get; set; }
    public string Name { get; set; }

    public virtual Token Token { get; set; }
}

因此每个用户都有一个仅与该用户相关的关联令牌,还有其他与其他对象相关的令牌,我将以类似的方式进行映射。

到目前为止,我已经尝试了以下以及一些变体,并且它没有按预期工作,我不断为用户获取不正确的位置,因为它似乎使用User.ID映射到Token.ID而不是使用User。 TokenID。

modelBuilder.Entity<User>()
    .HasRequired(p => p.Token)
    .WithOptional(p => p.Contact);

我想我实际上缺少指定要用于映射的列?我只是不确定从哪里开始。

编辑以前,当映射使用WithRequired()扩展方法的关系时,我之后能够指定HasForeignKey(),但WithOptional()似乎没有此功能。

1 个答案:

答案 0 :(得分:0)

我有一个不理想的解决方案,但目前我的工作正常。

我已经更改了模型和映射,如下所述,指定1对多关系,即使实际情况并非如此。

public class Token
{
    public int ID { get; set; }
    public string Location { get; set; }

    public virtual List<User> Contact { get; set; }
}

public class User
{
    public int ID { get; set; }
    public int TokenID { get; set; }
    public string Name { get; set; }

    public virtual Token Token { get; set; }
}

然后这个映射。

modelBuilder.Entity<User>()
    .HasRequired(u => u.Token)
    .WithMany(t => t.Contact)
    .HasForeignKey(u => u.TokenID);