我有两个型号
public class User: Entity
{
public string Gender { get; set; }
public string Name { get; set; }
}
还有
public class CognitoUser : Entity
{
public string UserId { get; set; }
public User User{ get; set; }
public string CognitoName { get; set; }
}
我想将 Cognito.UserId 设置为 User.Id 。我写了以下内容,但不起作用,请您纠正我,因为我不想将模型 CognitoUser 创建到用户模型中。
modelBuilder.Entity<CognitoUser>(e =>
{
e.ToTable("CognitoUser");
e.HasKey(p => p.UserId);
e.HasOne(x => x.User)
.HasForeignKey<User>(c => c.Id);
});
每个实体都需要主键,而您的
User
实体中缺少主键。
使用
Fluent API
是可选的。如果您正确设置类,实体框架将理解您想要实现的目标。
提示:
[Key]
属性指定属性为主键{ClassName}{Id}
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
强制数据库
自动为您生成主键。Guid
作为主键类型,它始终是唯一且无麻烦的此外,请查看下面的代码以了解如何创建关系。
public class User: Entity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid UserId { get; set; }
public string Gender { get; set; }
public string Name { get; set; }
}
public class CognitoUser: Entity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid CognitoUserId { get; set; }
public string CognitoName { get; set; }
// relation
[ForeignKey("User")]
public Guid UserId { get; set; }
public User User { get; set; }
}
可视化: