Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将1映射到1与Fluent EF的关系_C#_Asp.net_Entity Framework - Fatal编程技术网

C# 将1映射到1与Fluent EF的关系

C# 将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

我希望这会是相当直接的,但我没有太多的运气。我正在使用的数据库有一个用于用户的表和一个用于令牌的表,它们以1:1的关系相互关联,令牌是我所理解的主体

因此,每个用户都有一个只属于该用户的关联令牌,还有其他与其他对象相关的令牌,我也将以类似的方式映射这些令牌

到目前为止,我已经尝试了下面的方法以及一些变体,但并没有达到预期效果,我一直为用户获取不正确的位置,因为它似乎使用User.ID映射到Token.ID,而不是使用User.TokenID

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);