Automapper实体框架外键为空

2024-05-15

我正在尝试使用实体框架更新数据库,我使用自动映射器将实体映射到视图模型,并以相同的方式将其映射回来:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([FromJson] MyCVViewModel model)
{
    var userId = User.Identity.GetUserId();
    //find the cv
    CV cv = repository.FindCV(model.CVId);

    //auto mapper mapping
    Mapper.CreateMap<MyCVViewModel, CV>();
    Mapper.CreateMap<MyCompanyViewModel, Company>();
    cv = Mapper.Map<MyCVViewModel, CV>(model, cv);

    //edit
    repository.EditCV(cv);
}

当我映射回来时,公司实体内的外键CVid变成0,我认为在映射过程中丢失了一些东西,你如何映射外键?

这是我的视图模型和实体:

查看型号:

public class MyCVViewModel
{
    public int CVId { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "Title cannot exceed 100 characters.")]
    [Display(Name = "Title")]
    public string Title { get; set; }
    [Required]
    [StringLength(1000, ErrorMessage = "Statment cannot exceed 1000 characters.")]
    [Display(Name = "Statement")]
    public string Statement { get; set; }

    public bool Reference { get; set; }

    public List<MyCompanyViewModel> Companies { get; set; }
}

public class MyCompanyViewModel
{
    [Required]
    [StringLength(100, ErrorMessage = "Company Name cannot exceed 100 characters.")]
    [Display(Name = "Company Name")]
    public string CompanyName { get; set; }
    [Required]
    [StringLength(100, ErrorMessage = "Job Title cannot exceed 100 characters.")]
    [Display(Name = "Job Title")]
    public string JobTitle { get; set; }
    [Required]
    [DataType(DataType.Date)]
    [Display(Name = "Start Date")]
    public DateTime StartDate { get; set; }
    [Required]
    [DataType(DataType.Date)]
    [Display(Name = "End Date")]
    public DateTime EndDate { get; set; }
    [Required]
    [StringLength(1000, ErrorMessage = "Job Description cannot exceed 1000 characters.")]
    [Display(Name = "Job Description")]
    public string Description { get; set; }
}

Entity:

public class CV
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int CVId { get; set; }
    public string Title { get; set; }
    public string Statement { get; set; }
    public bool Reference { get; set; }

    public virtual ICollection<Company> Companies { get; set; }
}

public class Company
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int CompanyId { get; set; }

    public string CompanyName { get; set; }
    public string JobTitle { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public string Description { get; set; }

    public virtual CV CV { get; set; }
    public int CVId { get; set; }
}

这是我尝试更新时的错误消息:

操作失败:无法更改关系,因为一个或多个外键属性不可为空。当关系发生更改时,相关的外键属性将设置为空值。

我明白问题出在哪里,但不知道如何告诉自动映射器保留外键值


MyCompanyViewModel类不包含定义CVId财产,所以默认情况下 Automapper 不知道他应该在哪里取一个值来注入Company's CVId财产。只需定义它:

public class MyCompanyViewModel
{
    public int CVId { get; set; }
    // Other properties
}

然后对于每个CompanyViewModel将相应的隐藏输入字段添加到视图中:

@for (int i = 0; i < Model.Companies.Count; i++)
{

    // ...

    @Html.HiddenFor(m => Model.Companies[i].CVId)

    // ...

}

一切顺利!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Automapper实体框架外键为空 的相关文章

随机推荐

  • 使用 Angular ui-router 基于状态参数加载控制器

    我正在尝试加载基于状态参数的控制器以使其可重用 state dashboard item detail url detailId detailId detailName detailName views main templateUrl f
  • 使用 OWIN Identity 注册来自多个 API 客户端的 Web API 2 外部登录

    我想要以下架构 我为本示例编写了产品名称 在一台服务器上运行的 Web API 2 应用程序 http api prettypictures com http api prettypictures com 在另一台服务器上运行的 MVC 5
  • 扩展引导程序预输入的宽度以匹配输入字段

    我知道这个问题之前至少被问过三次 但我看到的答案并不是我想要的 我希望增加 twitter bootstrap 通过其 typeahead 功能生成的自动完成字段的宽度 我一直在读到它延伸到覆盖该字段中的所有文本 也就是说 文本越长 自动完
  • 如何在eclipse或jar-file-explorer中查看jar文件的内容

    我正在开发一个项目 我需要知道我的网络项目中包含的 jar 文件的内容 我正在使用 Eclipse 朱诺 然而 Netbeans 提供了这些功能来查看 jar 文件的内容 请建议我如何在 eclipse 中实现这一点 在项目资源管理器中 您
  • 序列化是通过套接字发送数据的最佳选择吗?

    有人告诉我 序列化不是通过套接字发送数据的最佳方法 但他们说他们在一本书上读过一次 并且不确定更好的方法 因为他们以前没有真正做过网络 那么序列化是最好的方法还是有更好的方法 如果这有很大的不同的话 这也是一个游戏 通过搜索有关通过它发送对
  • matplotlib xkcd 无法在 Mac 上运行

    我在可视化 matplotlib xkcd 图时遇到小问题 通过简单地尝试执行上找到的示例matplotlib org http matplotlib org examples showcase xkcd html 当我执行 xkcd py
  • 更新列的脚本

    表名 公民 Firstname Lastname Telephone1 Many other columns John Smith 03907625212 Andrew Evans 0807452132 Bill Towny 0590712
  • 使用项目中的波形文件

    我目前只能通过将波形文件放在已编译的 exe 旁边来播放背景声音 但我实际上想要一个包含波形文件的静态可执行文件 这在Delphi XE2中可能吗 这是我的代码 SndPlaySound Raw wav SND ASYNC or SND L
  • Twitter 的 Bootstrap 是否像 Skeleton 一样适合移动设备?

    骨架经过缩放以适应移动浏览器 遵循以下原则响应式网页设计 http www abookapart com products responsive web design Bootstrap 提供同样的功能吗 还没有 http groups g
  • 为什么我得到 NaN? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我正在制作一个预算控制器应用程序 我从值输入中得到 NaN var budgetController function
  • 如何在c#中使用文件上传控件调整大小并保存上传的图像

    我使用 ASP NET MVC4 和 razor 开发了一个 Web 应用程序 在我的应用程序中 有一个文件上传控件可以上传图像并保存在临时位置 在保存图像之前 应将图像调整为特定大小 然后保存在给定的临时位置 这是我在控制器类中使用的代码
  • 为什么对于小数组,for-of 循​​环比标准 for 循环快,而对于大数组则慢?

    在 JavaScript 中 我注意到 ES6for of循环的性能与传统的有很大不同for start stop step loop 基准 const n 10000 const arr Array n fill map e i gt i
  • 使用过渡+不透明度更改+溢出隐藏时出现问题

    如果您看到我共享的代码示例 您可以看到覆盖层超出了框的范围 我将问题追溯到transition属性 我想删除div之外的内容 溢出没有按预期工作 删除transition有效 但如果可能的话我想保留它 任何帮助表示赞赏 代码笔链接 http
  • 包围一组点的多边形

    我有一组 S 点 2D 由 x 和 y 定义 我想找到 P 包围该组所有点的最小 含义 具有最少数量的点 多边形 P 是S 有没有已知的算法来计算这个 我在这个领域缺乏文化令人惊讶 感谢您的帮助 对于这个问题有很多算法 它被称为 最小边界框
  • Android模拟器中的互联网连接始终显示连接状态

    我尝试了多种方法来检查我的 Android 模拟器中的互联网连接 ConnectivityManager conMgr ConnectivityManager getSystemService Context CONNECTIVITY SE
  • 断点会停止所有线程吗?

    如果我的程序中有两个线程同时运行 并在其中一个线程上设置了断点 那么当遇到此断点时 另一个线程也会停止 还是会继续执行 我用 Java 编写并使用 NetBeans 断点可以选择它们的行为方式 挂起单个线程或所有线程
  • 使用 Intellij Idea 和 gradle 在应用程序引擎上调试 localhost

    我正在使用 IntelliJ 社区添加并使用 Gradle 构建应用程序引擎标准环境应用程序 在迁移到 IntelliJ 和端点框架之前 我使用的是 Android Studio 我无法调试我的本地主机 我添加了 jvmFlags 如下所述
  • 如何在Python中计算输出的均值、众数、方差、标准差等?

    我有一个基于概率的简单游戏 每天我们抛一枚硬币 如果正面朝上 我们就赢了 我们会得到 20 美元 如果我们抛硬币 反面朝上 那么我们会在月底损失 19 美元 28 天 我们可以看到我们失去或赚了多少 def coin tossing gam
  • 对在 C++ 应用程序中作为函数参数传递的文件运行“iconv”命令

    我正在尝试将 Windows 文件 CP1252 格式 转换为 Linux 应用程序的 UTF 8 格式 我想在我的 C 应用程序中运行以下命令 iconv f CP1252 t UTF 8 file ldf dos2unix gt out
  • Automapper实体框架外键为空

    我正在尝试使用实体框架更新数据库 我使用自动映射器将实体映射到视图模型 并以相同的方式将其映射回来 HttpPost ValidateAntiForgeryToken public ActionResult Edit FromJson My