不公开其关系(EF)的外键属性的实体



当尝试调用SaveChanges()时,我得到以下错误:

保存不公开其关系的外键属性的实体时出错。EntityEntries属性将返回null,因为无法将单个实体标识为异常的源。通过在实体类型中公开外键属性,可以更容易地在保存时处理异常。有关详细信息,请参阅InnerException。'

SqlException:列名"Artwork_Id"无效

我正在使用实体框架。

我正在尝试添加一个artworkImage,它具有艺术品的Id作为参考。所有信息都被正确传递,但没有保存。

我已经尝试将外键添加到我的模型和dbcontext中,但除了下面的代码之外,我还没有得到更多的东西。

public partial class ArtworkImage
{
[Key]
public int Id { get; set; }
public string ImageURL { get; set; }
public Artwork Artwork { get; set; }
}
public partial class Artwork
{
[Key]
public int Id { get; set; }
public string Category { get; set; }
public ICollection<ArtworkImage> ArtworkImage { get; set; }
}

我的数据库上下文:

public DbContext()
: base("name=DbConnection")
{
this.Configuration.AutoDetectChangesEnabled = false;
}
public virtual DbSet<Artwork> Artworks { get; set; }
public virtual DbSet<ArtworkImage> ArtworkImages { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Artwork>()
.Property(e => e.Category)
.IsFixedLength();
modelBuilder.Entity<Artwork>()
.HasKey(b => b.Id);
modelBuilder.Entity<ArtworkImage>()
.HasKey(b => b.Id);
Database.SetInitializer<DbContext>(null);
base.OnModelCreating(modelBuilder);
}

我认为我应该在我的dbcontext中添加这样的内容,但我还没有完全弄清楚。

modelBuilder.Entity<ArtworkImage>()
.HasRequired(p => p.Artwork)
.WithMany(d => d.ArtworkImage)
.HasForeignKey(p => p.Artwork);

如果缺少任何信息,请指出,我会添加它。

您必须在每个表上声明主键。这是一个罕见的场合,当一张桌子没有PK。几乎从来没有。

[Key]
public int Id { get; set; }

因此,您的部分问题可能是您没有反向定义关系,我认为这对于如何建立一对一或一对多的关系很重要。因此,您可能需要在Artwork类上添加ArtworkImage类型的属性(如果是一对一(。如果是一对多,则需要使用ArtworkImage类型的泛型使属性成为一些泛型集合。

一对一

public partial class Artwork
{
[Key]
public int Id { get; set; }
public string Category { get; set; }
public ArtworkImage ArtworkImage { get; set; }
}

一对多

public partial class Artwork
{
[Key]
public int Id { get; set; }
public string Category { get; set; }
public IEnumerable<ArtworkImage> ArtworkImages { get; set; }
}

最新更新