最近在學習使用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賦值的。
- 1 回答
- 0 關注
- 1097 瀏覽
添加回答
舉報
0/150
提交
取消