如何使用实体框架代码优先对具有复杂类型列表的模型执行 CRUD 操作

本文关键字:列表 类型 复杂 模型 操作 CRUD 执行 框架 实体 何使用 代码 | 更新日期: 2023-09-27 18:31:32

我正在尝试对包含复杂类型列表的实体执行 CRUD 操作。我已经尝试了几种方法并执行了各种Google搜索,但到目前为止,我发现的只是问题。

我有以下视图模型:

public class GameViewModel
{
    public long Id { get; set; }
    public string Name { get; set; }
    public string OfficialWebsiteUrl { get; set; }
    public ReleaseDateViewModel ReleaseDate { get; set; }
    public List<ReleaseDateViewModel> ReleaseDates { get; set; }
}
public class ReleaseDateViewModel
{
    public long Id { get; set; }
    public long PlatformId { get; set; }
    public string PlatformName { get; set; }
    public long GameId { get; set; }
    public IEnumerable<SelectListItem> Platforms { get; set; }
    public bool IsActive { get; set; } = true;
}

我还有以下平台模型:

public class Platform
{
    public virtual long Id { get; set; }
    public virtual string Name { get; set; }
}

我遵循了这篇非常有用的文章的建议:为具有List对象属性的模型生成创建视图

我目前具有添加新游戏的功能,这也会将新发布日期列表添加到我的数据库中,我可以查看这些列表。但是我在执行更新和删除时遇到问题。

我需要能够删除单个发布日期,并删除和更新游戏。如果删除了游戏,则应删除所有相关的发布日期。- 我不知道如何实现这一点。

为简洁起见,我省略了上述模型的一些属性,并且没有包含任何控制器或视图代码。如果您需要任何这些信息来帮助回答问题或帮助使这篇文章更有用,请告诉我,我会添加它们。

如何使用实体框架代码优先对具有复杂类型列表的模型执行 CRUD 操作

级联删除将按照尤金的说法为游戏删除解决问题。

  • 要更新游戏视图模型,保留更改的发布日期:使用所需的值和 Id(将发布日期集合留空)构建 GameViewModel 对象,附加到上下文并将状态设置为已修改并保存更改
  • 用于添加新发布日期:与第一个相同,并且仅将新的发布日期添加到集合中
  • 对于更新或删除发布日期
  • :直接更新或删除发布日期实体作为正常实体。我的意思是不要试图通过从游戏的发布日期集合中删除来删除发布日期,这根本不起作用

希望这有帮助