我希望这会相当直接,但我没有太多运气。我正在使用的数据库有一个用户表和一个用于令牌的表,它们彼此相关,与令牌有一对一的关系,因为我理解为 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()似乎没有此功能。
答案 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);