我有一个新闻表和一个文件表,我想在其中保存与新闻相关的图像或 pdf。下面是我的模型和 Create 方法,我将发布的文件保存到连接表中。
但是我收到以下错误。这对我来说没有意义,因为 NewsFiles 不应该是我数据库中的对象。NewsFile 是一个表,而 NewsFiles 是虚拟集合。
处理请求时数据库操作失败。DbUpdateException: 更新条目时出错。有关详细信息,请参阅内部异常。SqlException: 无效的对象名称“NewsFiles”。ApplicationDbContext 有待处理的模型更改 在 Visual Studio 中,使用包管理器控制台为这些更改构建新的迁移并将它们应用到数据库:
PM> Add-Migration [migration name] PM> Update-Database 或者,您可以搭建新的迁移并从项目目录的命令提示符应用它:
dotnet ef 迁移添加 [迁移名称] dotnet ef 数据库更新
public class News
{
[Key] public int Id { get; set; }
public string Title { get; set; }
public virtual ICollection<NewsFile> NewsFiles { get; set; }
}
public class File
{
[Key] public int Id { get; set; }
public string Filename { get; set; }
public Byte[] Content { get; set; }
public virtual ICollection<NewsFile> NewsFiles { get; set; }
}
public class NewsFile
{
[Key] public int Id { get; set; }
public int NewsId { get; set; }
public News News { get; set; }
public int FileId { get; set; }
public File File { get; set; }
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<NewsFile>().HasIndex(nf => new { nf.NewsId, nf.FileId });
builder.Entity<NewsFile>().HasOne(nf => nf.News).WithMany(n => n.NewsFiles).HasForeignKey(nf => nf.NewsId);
builder.Entity<NewsFile>().HasOne(nf => nf.File).WithMany(c => c.NewsFiles).HasForeignKey(pc => pc.FileId);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(NewsViewModel model)
{
if (ModelState.IsValid)
{
Byte[] file = null;
using (var ms = new MemoryStream())
{
model.File.CopyTo(ms);
file = ms.ToArray();
}
model.News.NewsFiles = new List<NewsFile>()
{
new NewsFile()
{
File = new Models.File() { Content = file, Filename = model.File.FileName }
}
};
holdtom
相关分类