當然還是有機會引起Class名稱上的混亂,但還是機會較微,因為即使要採用Entity,都會使用回EF輸出的POCO classes。
但MVC專案情況下就有所不同,大家都知道,除了DBContext之外,一般我們還會在Models下建立類同的POCO classes (或可叫做DTOs, Data Transfer Objects),而到了EF6,更可以用Code First做Reverse Engineer 快速建立POCOs。
至於原因可以看看這裡 - Entity Framework classes vs. POCO。
上述兩者不止內容相似,名稱都可以是相似甚至一樣,如果跟Webforms專案時一樣放在同一個Project下,那麼問題就出現了。
因為很大機會程式會出現錯誤訊息:
Schema specified is not valid.
Errors:
The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM type 'Address'.
Previously found CLR type 'NewMVC.Models.Address', newly found CLR type 'NewMVC.Database.Address'.
最簡單地說明原因是EF會忽略Namespace,而以Class Name做Table Mapping,更詳細的解釋,可以看看CodePlex上的回報。
- Can't map two classes with same name from different namespace
- Improve Exception Message when 2 classes with same name are mapped from different namespaces
解決方法就是以另一個Assembly去載入DBContext,換句話說,就是新建Class Library Project去把EntityFramework的DBContext跟本身的Models分離。
沒有留言:
發佈留言