为了账号安全,请及时绑定邮箱和手机立即绑定

Codefirst中使用NotMapped

Codefirst中使用NotMapped

aluckdog 2018-08-27 11:10:38
最近在学习使用ef框架,在使用过程中遇到一个问题,由于使用Codefirst,数据库的创建是根据实体属性来的。有些属性不需要创建对应的表字段。ef中可以使用NotMapped来标识类的某个属性不需要创建对应的数据库字段。但是此操作会导致在调用ef中执行sql脚本函数(context.database.sqlquery)的时候,被NotMapped描述属性不能被正常查出来。例如:class a 中有属性 fieldA,fieldB,fieldC。fieldC有NotMapped描述。执行List<a> result = context.database.sqlquery<a>("select fieldA,fieldB,1 as filedC").tolist();查询结果result中的fieldC的属性为null。解决方案:使用viewmodel的形式获取数据,然后将数据拷贝到a中。class b:a{}b不包含在ef上下文中。List<a> result = context.database.sqlquery<b>("select fieldA,fieldB,1 as filedC").select(x=>new a(){  fieldA=x.fieldA,  fieldB=x.fieldB,  fieldC=x.fieldC}).tolist();这种方式可以解决问题,但是总觉得多绕了一步。监测数据库的时候看到ef发送的sql指令是完完整整发过去的。也就是说ef肯定是接收到了一张完整,包含fieldC字段的一张表的。只是在将表转化成对象的时候忽略掉了这个字段。我却因为这个要去新建一个“无意义”的实体。觉得有些别扭,网上没找到想要的答案。所以在这里求大佬赐教。
查看完整描述

1 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

1. 你可以不必建这个属性的。

2. 如果你非要有这个属性, NotMapped 的属性,你又非要从数据库查询中取,当然是这个鬼样了。

人家提供了让你可以有属性不映射到数据库,没说让你从数据库取值的,

比如像你这样的,完全可以在构造函数中直接给 fieldC赋值的。

 


查看完整回答
反对 回复 2018-09-01
  • 1 回答
  • 0 关注
  • 1063 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信