属性 'MyField' 类型 'Class1' 上的 ForeignKeyAttribute 无效

The ForeignKeyAttribute on property 'MyField' on type 'Class1' is not valid

在 Entity Framework(一对多关系)的外键上苦苦挣扎。

class1:

 public partial class Class1
    {

        public int Id { get; set; }
       [ForeignKey("Class2_Id")]
        public Class2 Class2{ get; set; }
...}

Class2:
 public partial class Class2
    {

        public int Id { get; set; }
        public virtual ICollection<Class1> Stuff{ get; set; }
...}

1)我尝试使用 fluentAPI: 第一次尝试:

modelBuilder.Entity<Class2>().HasMany<Class1>(p => p.Stuff).WithOptional().Map(m => m.MapKey("Class2_Id")).WillCascadeOnDelete();

第二次尝试:

 modelBuilder.Entity<Class1>().HasRequired(i => i.Class2).WithMany().Map(m => m.MapKey("Class2_Id"));

2)没有流利的API: 我这样声明了相关的 Class2 字段:

[Column("Class2")]
public int Id { get; set; }

甚至(这可能没有意义):

[ForeignKey("Class2")]
public int Id { get; set; }

我总是得到这个错误:

The ForeignKeyAttribute on property 'Class2' on type 'Class1' is not valid. The foreign key name 'Class2_Id' was not found on the dependent type 'Class1'. The Name value should be a comma separated list of foreign key property names.

知道哪里出了问题吗?

提前致谢。

使用您流畅的 api 配置,您定义的是单向关系,因此正确的方法是:

modelBuilder.Entity<Class2>().HasMany(p => p.Stuff)
                             .WithOptional(c=>c.Class2)
                             .Map(m => m.MapKey("Class2_Id"))
                             .WillCascadeOnDelete();

MapKey 当您不想在模型 class.

中将外键作为 属性 时使用方法

将 FK 列表示为实体的 属性 时使用 ForeignKey 属性:

public partial class Class1
{

    public int Id { get; set; }

    public int? Class2_Id{ get; set; }

    [ForeignKey("Class2_Id")]
    public Class2 Class2{ get; set; }
}

在最后一种情况下,您使用 Fluent Api 的关系配置将是:

modelBuilder.Entity<Class2>().HasMany(p => p.Stuff)
                             .WithOptional(c=>c.Class2)
                             .HasForeignKey(c=>c.Class2_Id))
                             .WillCascadeOnDelete();