属性 '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();
在 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();