首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种通用的方法让EF在提交更改后返回新的模型数据和关联的模型数据?

有没有一种通用的方法让EF在提交更改后返回新的模型数据和关联的模型数据?
EN

Stack Overflow用户
提问于 2012-10-18 07:13:36
回答 1查看 76关注 0票数 1

假设有以下两个模型:

代码语言:javascript
复制
public class Card
{
    public int CardId { get; set; }

    public Media Media { get; set; }
}

public class Media
{
    public int MediaId { get; set; }

    [Required]
    public string FileName { get; set; }
}

和下面的控制器方法:

代码语言:javascript
复制
[HttpPost]
public ActionResult Create(Card card)
{
    db.Media.Attach(card.Media);

    ModelState.Remove("Media.FileName");

    if (ModelState.IsValid)
    {
        db.Cards.Add(card);                
        db.SaveChanges();
    }

    return JsonNetSerializedResult(card);
}

我想创建一个新的Card,但将其与现有的Media对象相关联。我发布到“控制器/创建”,并包含一个"Media.MediaId“参数,该参数包含现有媒体记录的ID,并让EF进行关联。

但是,在调用SaveChanges()之后,在Card实例上更新的唯一属性是CardId。我还需要检索Media.FileName并在Card实例上设置该属性。

有没有一种通用的方法来告诉EF我想要返回更新的卡数据,并返回提交数据的相关媒体数据?

EN

回答 1

Stack Overflow用户

发布于 2012-10-18 08:24:42

可能会引起一些混淆的是您使用实体模型作为ViewModel的事实。

实际上,我建议创建真正的 ViewModel类,这些类表示控制器接收的信息或用作视图的模型。没有按原样使用实体模型。这看起来像是额外的工作,但它确实让你对UI管理的内容和实体的建模方式有了更多的控制。

在这种情况下,您可能会有类似于NewCardModel的东西,或者只是简单的CardModel,它具有UI中显示的字段的属性,以及媒体元素的id。

然后,您必须手动创建Card实例,填充信息(automapper可能非常有用),并且在保存更改之前,您需要通过ID查找Media实例,并将该实例与新的Card实例相关联。

这个答案可能会更多地揭示使用ViewModels的利弊:https://stackoverflow.com/a/10928437/1373170

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12944820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档