我正在使用SPMetal爲我的SharePoint站點生成實體類,但我不完全確定當有多種內容類型時最佳實踐是什麼爲單個列表。例如,我有一個任務列表,其中包含2種內容類型,我通過SPMetal的配置文件定義它們。這裏是我的定義...LINQ to Sharepoint單個列表的多種內容類型
<List Member="Tasks" Name="Tasks">
<ContentType Class="LegalReview" Name="LegalReviewContent"/>
<ContentType Class="Approval" Name="ApprovalContent"/>
</List>
這似乎在生成的對象工作得很好也從WorkflowTask但對於數據的背景下產生的類型繼承是WorkflowTask的名單。所以當我做一個查詢時,我得到一個WorkflowTask對象而不是LegalReview或Approval對象。我如何讓它返回正確類型的對象?
[Microsoft.SharePoint.Linq.ListAttribute(Name="Tasks")]
public Microsoft.SharePoint.Linq.EntityList<WorkflowTask> Tasks {
get {
return this.GetList<WorkflowTask>("Tasks");
}
}
UPDATE 感謝回去我。我不知道如何重新創建基於SPListItem的類型,並希望得到任何反饋。
ContractManagementDataContext context = new ContractManagementDataContext(_url);
WorkflowTask task = context.Tasks.FirstOrDefault(t => t.Id ==5);
Approval a = new Approval(task.item);
public partial class Approval{
public Approval(SPListItem item){
//Set all properties here for workflowtask and approval type?
//Wouldn't there be issues since it isn't attached to the datacontext?
}
public String SomeProperty{
get{ //get from list item};
set{ //set to list item};
}
嗨Rob感謝您的反饋,一個很好的戰略,以獲得底層的SPListItem。我仍然不確定你將如何創建一個給定列表項目的實體......是否會像更新後的問題一樣? – 2012-02-22 22:02:54
是的,你可以做那樣的事情。不需要直接從SPListItem中提取值的附加屬性,因爲您將在創建對象時初始化實體上的屬性。你對這個實體沒有被附加到上下文也是正確的。我沒有包含它,因爲它取決於需求,但如果您需要更新/刪除,則可以將實體附加到合適的上下文中。還有其他方法可以降低,例如一個靜態的EntityConverter類或每個基類型的方法。讓我知道如果你需要一個例子,我會更新答案。 – robwilliams 2012-02-23 12:16:09
嗨,Rob,如果你能發佈你的entityconverter類的例子,如果它對你來說不是太多工作,我會很感激。再次感謝所有的幫助! – 2012-02-23 16:47:47