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