我有一个实体user
,其内容如下:
public class User
{
[Key, Required]
public int Id { get; set; }
public int GenderId { get; set; }
public virtual Gender Gender { get; set; }
}
在gender
中
public class Gender
{
[Key, Required]
public int Id { get; set; }
public virtual ICollection<User> Users { get; set; }
}
然后,在我的DbContext
里,我有:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>(user =>
{
user
.HasOne(x => x.Gender)
.WithMany(x => x.Users)
.HasForeignKey(x => x.GenderId);
}
user.HasIndex(x => x.Gender);
}
当我运行dotnet ef add migration User
时,我得到的是错误:
“‘Gender”不能用作实体类型“User”的属性,因为它被配置为导航。
发布于 2019-12-18 12:56:50
我试图在导航属性上创建一个索引。相反,在外键上创建索引。
将user.HasIndex(x => x.Gender)
更改为user.HasIndex(x => x.GenderId)
。
发布于 2019-11-01 12:47:54
在您的[ForeignKey("GenderId")]
属性上使用public virtual Gender Gender { get; set; }
。因此,GenderId将被识别为关联用户的外键。
见下面更新的代码:
public class User
{
public int GenderId { get; set; }
[ForeignKey("Id")]//Gender Primary key
public virtual Gender Gender { get; set; }
}
希望它能解决你的问题。
谢谢,
发布于 2019-11-20 16:38:34
我也犯了类似的错误:
“产品”不能用作实体类型'OrderLine‘的属性,因为它被配置为导航。
造成此错误的原因是,在fluent api中,我还将该实体用作属性:
modelBuilder.Entity<OrderLine>().Property(ol => ol.Product).IsRequired(true)
https://stackoverflow.com/questions/58659431
复制相似问题