首页 > 解决方案 > EF Core - 在没有外键约束的两个模型之间创建关系

问题描述

我正在开发一个微服务系统,我在其中复制UsersTokens跨多个服务。

有时,在它所属的Token之前收到,我得到一个错误:User

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 中有没有办法与导航属性建立关系,但没有约束 - 所以我可以添加Token一个尚不存在Id的外键,这最终会是一致的吗?

这是模型:

代币:

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

    public long? UserId { get; set; }
    
    public virtual User User { get; set; }
}

用户:

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

    public virtual ICollection<Token> Tokens { get; set; }
}

这是 migration.designer.cs 生成外键的部分:

modelBuilder.Entity("Vehicloo.NoticeboardService.Database.Models.Token", b =>
{
    b.HasOne("Vehicloo.NoticeboardService.Database.Models.User", "User")
        .WithMany("Tokens")
        .HasForeignKey("UserId");

    b.Navigation("User");
});

标签: asp.net-coreentity-framework-core

解决方案


只需删除行:

public virtual ICollection<Token> Tokens { get; set; }

从这User一行开始:

public virtual User User { get; set; }

Token. 这告诉EF不要为用户令牌创建任何外键。因此,您将UserIdToken表中拥有不受任何约束的列。

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


推荐阅读