我能夠使用來自Microsoft的POCO template生成pocos。它效果很好。是否有可能在實體框架中使用現有類作爲POCO
我的問題是我如何修改這個或任何其他模板以使用來自不同裝配的現有對象,並將數據加載到它們中。
我嘗試去了解它的方式,是創建POCO的使用模板,和PocoGenerator.Context使用現有型號,並且不是修改生成的代碼返回而不是其生成的類我clasess。
這給了我可怕的「映射和元數據信息找不到EntityType MyType」..這可能是因爲我的對象沒有數據庫中有一些額外的字段。我試圖修改實體對象,並刪除那些領域,但這會導致一些其他問題..
有人做過這件事嗎?
UDPATE
是的,可以使用現有的類。要注意的一件事是,如果某些屬性名稱或類型之間存在不匹配,則會觸發上述無法提供信息的錯誤。有時候,運行時會給出一個有意義的錯誤,而且這個錯誤與不兼容的屬性名稱有關,但只有在兩個類都非常接近的情況下。
無論如何,要使用現有的類作爲pocos,只需生成pocos,然後再將生成的類註釋掉。比在xxxPocoGenerator.Context.cs中添加要使用的現有對象的必要命名空間。
作爲一個附註,我寫了下面的代碼來比較我現有的類和POCO生成的類,並顯示任何不匹配的東西,所以我可以修復它們。
var properties = typeof(MyExistingClass).GetProperties();
var tproperties = typeof(MyPOCOClass).GetProperties();
Console.WriteLine("---------------------------------Missing or Different Properties--------------------");
List<PropertyInfo> missingOrDifferentProperties = new List<PropertyInfo>();
foreach (var tp in tproperties)
if (properties.Where(p => p.Name == tp.Name && p.PropertyType == tp.PropertyType && p.CanRead == tp.CanRead && p.CanWrite == tp.CanWrite && p.IsSpecialName == tp.IsSpecialName && p.MemberType == tp.MemberType).Count() != 1)
Console.WriteLine(tp.Name + " :: " + tp.PropertyType.Name);
主題讀取:「是否可以使用激動人心類作爲波蘇斯實體框架」對不起,您的代碼中沒有令人興奮的類。請添加一個令人興奮的課程,然後重試。 :-) – ChessWhiz 2010-10-20 19:43:52
我修正了標題。 – 2010-10-20 19:46:07
好吧,我只是厭倦了那些不令人興奮的無聊課程。 – 2010-10-20 21:10:45