Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
Asp.net core EF Core-在没有外键约束的情况下创建两个模型之间的关系_Asp.net Core_Entity Framework Core - Fatal编程技术网

Asp.net core EF Core-在没有外键约束的情况下创建两个模型之间的关系

Asp.net core EF Core-在没有外键约束的情况下创建两个模型之间的关系,asp.net-core,entity-framework-core,Asp.net Core,Entity Framework Core,我在一个微服务系统上工作,我在多个服务中复制用户和令牌 有时,令牌在它所属的用户之前被接收,我得到一个错误: MessageText: insert or update on table "Tokens" violates foreign key constraint "FK_Tokens_User_UserId" Detail: Key (UserId)=(12) is not present in table "User". 在E

我在一个微服务系统上工作,我在多个服务中复制
用户
令牌

有时,
令牌
在它所属的
用户
之前被接收,我得到一个错误:

MessageText: insert or update on table "Tokens" violates foreign key constraint "FK_Tokens_User_UserId"
Detail: Key (UserId)=(12) is not present in table "User".
在EFCore中是否有一种方法可以与导航属性建立关系,但不受约束?这样我就可以添加
标记
,并将尚未存在的
Id
作为外键,最终会保持一致

以下是模型:

代币:

public class Token
{
    public long Id { get; set; }

    public long? UserId { get; set; }
    
    public virtual User User { get; set; }
}
用户:

只需删除以下行:

public virtual ICollection<Token> Tokens { get; set; }
令牌
。这告诉
EF
不要为用户令牌创建任何外键。因此,
Token
表中的
UserId
列将不受任何约束


对于查询,您可以手动联接两个表。

请输入您的问题,以包括您定义的EF实体。当您从数据库中删除外键时,您的代码是否工作?@Progman My code工作正常。正如我在帖子中所说:我正在添加外键
UserId
等于
12
-
User
的令牌,而
Id
在当时并不存在。我要做的是删除外键约束。如果要在
UserId
列中添加值
12
,但它被设置为
User
的外键,并且没有这样的行,然后必须删除外键或添加具有该id的
用户
行。有关外键冲突的错误消息来自PostgreSQL,而不是实体框架。@Progman是,但外键是由EFCore创建的。再一次——正如我在帖子中所说:“在EFCore中是否有一种方法可以与导航属性建立关系,但不受约束”。请你的问题包括通过EFCore创建外键的代码。我正在努力保持导航属性工作——它们对我的API至关重要,因为我使用热巧克力库,它利用它们来获取相关模型(它自己无法执行连接)。@JCode,恐怕您除了使用强制约束导航或根本没有导航之外别无选择。或者在迁移后删除约束。。。这也很乏味。
modelBuilder.Entity("Vehicloo.NoticeboardService.Database.Models.Token", b =>
{
    b.HasOne("Vehicloo.NoticeboardService.Database.Models.User", "User")
        .WithMany("Tokens")
        .HasForeignKey("UserId");

    b.Navigation("User");
});
public virtual ICollection<Token> Tokens { get; set; }
public virtual User User { get; set; }