0

我希望这将是相当直截了当的,但我没有太多的运气。我正在使用的数据库有一个用于用户的表和一个用于令牌的表,它们以 1 对 1 的关系相互关联,据我所知,令牌是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() 似乎没有此功能。

4

1 回答 1

0

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

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

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);
于 2012-10-19T00:32:38.747 回答