关于asp.net mvc中表单提交的问题,使用ef6,关于导航属性的覆盖,如何优雅的实现?

LinuxCard 2019-08-19 10:02:29
比如一个实体:Guest
Guest
{
public int GuestID{get;set;} //用户ID
public string GuestName{get;set;} //用户名
public string GuestPassword{get;set;} //用户密码
virutal ICollection<Power> guestpower{get;set} //这是导航属性,标识用户的权限
}


然后定义一个接收数据的实体GuestViewModel
GuestViewModel
{
public int GuestID{get;set;} //用户ID
public string GuestName{get;set;} //用户名
public string GuestPassword{get;set;} //用户密码
}

注意,这里的GuestViewModel中并没有导航属性,因为涉及到用户权限的修改,放在另外的界面,那么现在我要修改Guest数据

public void Edit(GuestViewModel guestViewModel)
{

var db=new xxxxx();//数据库上下文
var c = Mapper.Map<GuestViewModel, Guest>(u);//使用automapper将guestviewmodel实体映射为Guest实体

//以“未修改”状态附加实体到上下文
db.guests.Attach(c);
db.Entry(c).State = EntityState.Modified;

db.SaveChanges();

}


现在的问题是,这种方法下,GuestPower属性被删除了,因为通过Mapper映射后的导航属性,guestpower为Null

那么,怎么让原有的导航属性不变动,而只修改其他字段呢?一个字段一个字段的赋值,虽然能实现,但是感觉很笨拙
...全文
241 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
LinuxCard 2019-08-22
  • 打赏
  • 举报
回复
用automapper的mapto实现了
煮吧姐 2019-08-21
  • 打赏
  • 举报
回复
那需要重写底层了,动态根据你改变的值生成sql执行,推荐你读一下这个文章https://www.cnblogs.com/EmptyFS/p/3728664.html
LinuxCard 2019-08-20
  • 打赏
  • 举报
回复
这样说吧,我要实现的目的是: 用GuestViewModel中非空字段来更新Guest实体,,如果GuestViewModel中不存在的字段(如Power)不会覆盖原有的Guest内容
XBodhi. 2019-08-20
  • 打赏
  • 举报
回复
关系要对等。否则。会出错。
冰川711 2019-08-20
  • 打赏
  • 举报
回复
automapper 有设置的啊, 你看看相关文档去, 不过这些映射的底层都是用反射实现的, 还是一个属性一个属性去赋值 最有效率,也灵活~
正怒月神 版主 2019-08-19
  • 打赏
  • 举报
回复
你既然不想动手,那就找autoemit,automapper帮你完成
冰川711 2019-08-19
  • 打赏
  • 举报
回复
你的 GuestViewModel 类 本来就没有 guestpower 属性 , 映射成 Guest 类 , guestpower属性当然就是null 你还想让他变成什么? 你所谓的 怎么让原有的导航属性不变动 是什么意思
包括源代码、数据库文档、数据库创建SQL脚本。一套基于ASP.NET MVC+EF6+Bootstrap开发出来的框架源代码! 采用主流框架,容易上手,简单易学,学习成本低。可完全实现二次开发、基本满足80%项目需求。 可以帮助解决.NET项目70%的重复工作,让开发更多关注业务逻辑。既能快速提高开发效率,帮助公司节省人力成本,同时又不失灵活性。 支持SQLServer、MySQL、Oracle、SQLite、Access 等多数据库类型。模块化设计,层次结构清晰。内置一系列企业信息管理的基础功能。 操作权限控制精密细致,对所有管理链接都进行权限验证,可控制到导航菜单、功能按钮。 数据权限(精细化数据权限控制,控制到行级,列表级,表单字段级,实现不同人看不同数据,不同人对同一个页面操作不同字段 兼容目前最流行浏览器(IE8+、Chrome、Firefox、360浏览器) 1、前端技术 JS框架:Bootstrap、JQuery CSS框架:Bootstrap v3.3.4(稳定是后台,UI方面根据需求自己升级改造吧)。 客户端验证:jQuery Validation Plugin。 在线编辑器:ckeditor、simditor 上传文件:Uploadify 数据表格:jqGrid、Bootstrap Talbe 对话框:layer 页面布局:jquery.layout.js 图表插件:echarts、highcharts 2、后端技术 核心框架:ASP.NET MVC5、WEB API 持久层框架:EntityFramework 定时计划任务:Quartz.Net组件 安全支持:过滤器、Sql注入、请求伪造 服务端验证:实体模型验证、自己封装Validator 缓存框架:微软自带Cache、Redis 日志管理:Log4net、登录日志、操作日志 工具类:NPOI、Newtonsoft.Json、验证码

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧