最近在學(xué)習(xí)使用ef框架,在使用過程中遇到一個問題,由于使用Codefirst,數(shù)據(jù)庫的創(chuàng)建是根據(jù)實(shí)體屬性來的。有些屬性不需要創(chuàng)建對應(yīng)的表字段。ef中可以使用NotMapped來標(biāo)識類的某個屬性不需要創(chuàng)建對應(yīng)的數(shù)據(jù)庫字段。但是此操作會導(dǎo)致在調(diào)用ef中執(zhí)行sql腳本函數(shù)(context.database.sqlquery)的時候,被NotMapped描述屬性不能被正常查出來。例如:class a 中有屬性 fieldA,fieldB,fieldC。fieldC有NotMapped描述。執(zhí)行List<a> result = context.database.sqlquery<a>("select fieldA,fieldB,1 as filedC").tolist();查詢結(jié)果result中的fieldC的屬性為null。解決方案:使用viewmodel的形式獲取數(shù)據(jù),然后將數(shù)據(jù)拷貝到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();這種方式可以解決問題,但是總覺得多繞了一步。監(jiān)測數(shù)據(jù)庫的時候看到ef發(fā)送的sql指令是完完整整發(fā)過去的。也就是說ef肯定是接收到了一張完整,包含fieldC字段的一張表的。只是在將表轉(zhuǎn)化成對象的時候忽略掉了這個字段。我卻因?yàn)檫@個要去新建一個“無意義”的實(shí)體。覺得有些別扭,網(wǎng)上沒找到想要的答案。所以在這里求大佬賜教。
1 回答

陪伴而非守候
TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超8個贊
1. 你可以不必建這個屬性的。
2. 如果你非要有這個屬性, NotMapped 的屬性,你又非要從數(shù)據(jù)庫查詢中取,當(dāng)然是這個鬼樣了。
人家提供了讓你可以有屬性不映射到數(shù)據(jù)庫,沒說讓你從數(shù)據(jù)庫取值的,
比如像你這樣的,完全可以在構(gòu)造函數(shù)中直接給 fieldC賦值的。
- 1 回答
- 0 關(guān)注
- 1121 瀏覽
添加回答
舉報
0/150
提交
取消