我在实体框架插入时出错。当我想在子表中添加记录时,我收到了未找到字段的错误。 这是我的主要表类,如下所示:
public class Rcp
{
public Rcp()
{
RcpFl = new HashSet<RcpFiles>();
}
[Column("Rcp_ID")]
public int RcpId { get; set; }
public String RcpTitle { get; set; }
public virtual ICollection<RcpFiles> RcpFl { get; set; }
}
这是我的子表类:
public class RcpFiles
{
[Key]
public int RcpFile_Id { get; set; }
public byte[] Photo { get; set; }
public virtual Rcp rcp { get; set; }
}
在插入时出现错误字段找不到“RcpFile_Id”。
答案 0 :(得分:1)
您依赖于有关属性名称的约定。这是使用注释指定关系的方式。
public class Rcp
{
public Rcp()
{
RcpFl = new HashSet<RcpFiles>();
}
[Key]
[Column("Rcp_ID")]
public int RcpId { get; set; }
public String RcpTitle { get; set; }
[InverseProperty(nameof(RcpFiles.rcp))]
public virtual ICollection<RcpFiles> RcpFl { get; set; }
}
public class RcpFiles
{
[Key]
public int RcpFile_Id { get; set; }
public byte[] Photo { get; set; }
[Column("Rcp_ID")]
public int RcpId { get; set; }
[ForeignKey(nameof(RcpId))]
public virtual Rcp rcp { get; set; }
}
答案 1 :(得分:1)
看来你们是一对多的关系。
首先,您必须向 RcpFiles
实体添加外键属性:
public class RcpFiles
{
[Key]
public int RcpFile_Id { get; set; }
public byte[] Photo { get; set; }
public virtual Rcp rcp { get; set; }
public int RcpId { get; set; }
}
然后你必须设置配置。您有两种选择:
拳头是Fluent API
:
public class SchoolContext : DbContext
{
public DbSet<RcpFiles> RcpFiles { get; set; }
public DbSet<Rcp> Rcpes{ get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// configures one-to-many relationship
modelBuilder.Entity<RcpFiles>()
.HasRequired<Rcp>(s => s.rcp)
.WithMany(g => g.RcpFl)
.HasForeignKey<int>(s => s.RcpId);
}
}
第二个是Data annotiation
:这部分由@brian-parker (https://stackoverflow.com/users/1492496/brian-parker) 解释
有关更多信息,您可以查看:https://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx