C# 将1映射到1与Fluent EF的关系
我希望这会是相当直接的,但我没有太多的运气。我正在使用的数据库有一个用于用户的表和一个用于令牌的表,它们以1:1的关系相互关联,令牌是我所理解的主体 因此,每个用户都有一个只属于该用户的关联令牌,还有其他与其他对象相关的令牌,我也将以类似的方式映射这些令牌 到目前为止,我已经尝试了下面的方法以及一些变体,但并没有达到预期效果,我一直为用户获取不正确的位置,因为它似乎使用User.ID映射到Token.ID,而不是使用User.TokenIDC# 将1映射到1与Fluent EF的关系,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,我希望这会是相当直接的,但我没有太多的运气。我正在使用的数据库有一个用于用户的表和一个用于令牌的表,它们以1:1的关系相互关联,令牌是我所理解的主体 因此,每个用户都有一个只属于该用户的关联令牌,还有其他与其他对象相关的令牌,我也将以类似的方式映射这些令牌 到目前为止,我已经尝试了下面的方法以及一些变体,但并没有达到预期效果,我一直为用户获取不正确的位置,因为它似乎使用User.ID映射到Token.ID,而不是使用User.TokenID modelBuilder.Entity<User
modelBuilder.Entity<User>()
.HasRequired(p => p.Token)
.WithOptional(p => p.Contact);
modelBuilder.Entity()
.HasRequired(p=>p.Token)
.可选(p=>p.Contact);
我想我没有指定要映射的列?我只是不知道接下来该怎么办
编辑以前在映射使用WithRequired()扩展方法的关系时,我随后可以指定HasForeignKey(),但WithOptional()似乎没有此功能。我有一个不理想的解决方案,但目前对我来说还可以 我更改了模型和映射,如下所述,指定了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; }
}
公共类令牌
{
公共int ID{get;set;}
公共字符串位置{get;set;}
公共虚拟列表联系人{get;set;}
}
公共类用户
{
公共int ID{get;set;}
公共int标记ID{get;set;}
公共字符串名称{get;set;}
公共虚拟令牌{get;set;}
}
然后这个映射
modelBuilder.Entity<User>()
.HasRequired(u => u.Token)
.WithMany(t => t.Contact)
.HasForeignKey(u => u.TokenID);
modelBuilder.Entity()
.HasRequired(u=>u.Token)
.带多个(t=>t.触点)
.HasForeignKey(u=>u.TokenID);
如果它们是1-1,我认为EF希望它们共享主键。也许我的问题措辞不正确,这种关系使得每个用户都有一个必需的令牌ID,但令牌可能与其他对象关联,而不仅仅是用户。这是“1对0还是1”?如果是这样的话,我该如何正确地映射呢?是的,如果令牌不一定要有用户,那么它是1-0:1关系。这可能有助于:
modelBuilder.Entity<User>()
.HasRequired(u => u.Token)
.WithMany(t => t.Contact)
.HasForeignKey(u => u.TokenID);