如何使用Entity Framework Code First为具有复杂类型列表的Model执行CRUD操作?

时间:2016-01-23 18:57:31

标签: c# entity-framework ef-code-first complextype

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

我有以下ViewModels:

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; }
}

我已按照这篇非常有用的帖子提出建议:Generate create view for model which have List object property

我目前有能力设置为添加新游戏,它还会向我的数据库添加新的ReleaseDates列表,我可以查看这些。但是我在执行更新和删除时遇到了问题。

我需要能够删除单个ReleaseDate,并删除和更新游戏。如果删除游戏,则应删除所有相关的ReleaseDates。 - 我不知道如何实现这个。

为简洁起见,我省略了上述模型的一些属性,但我没有包含任何控制器或视图代码。如果您需要任何该信息来帮助回答问题或帮助使其成为更有用的帖子,请告诉我,我会将其添加进来。

1 个答案:

答案 0 :(得分:1)

级联删除将为Eugene所述的游戏删除提供技巧。

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

希望这有帮助