我正在研究一個企業應用程序,該應用程序將包含一個豐富的WPF客戶端,該客戶端會與一堆webservices進行對話以檢索數據。這些數據是使用Code First EF 4.2創建的POCO。如何在基於WCF的場景中管理EF 4.2關聯
我現在面臨着一個概念性的問題,我一直在試圖圍繞我的頭,但無法找到一個好的解決方案。
1:N協會
因此數據模型是這樣的:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Person> Children { get; set; }
}
Serverside集團我有這需要附加新創建的DTOS(包括兒童收集新項目)的護理接口從客戶端到數據上下文並保存。這當然只適用於在客戶端創建這些實體然後發送添加的實體。該服務添加新實體並返回更新的實體(主要是Id屬性)。
[ServiceContract]
public interface IMyPersonCaretaker
{
[OperationContract]
Person CreatePerson(Person entity)
}
然而,當我取回已經存在的實體,我不能編輯任何關聯(添加或刪除實體 - 因爲他們是固定的大小)。所以現在我就需要擴展接口,允許這樣的:
[ServiceContract]
public interface IMyPersonCaretaker
{
[OperationContract]
Person CreatePerson(Person entity)
[OperationContract]
Person AddChild(Person parent, Person child)
}
這對我來說似乎是一個笨拙的方法和接口都越來越大,非常快。這是與POCO合作的複雜方法嗎?你怎麼做呢?
N:通過手動映射中號協會
數據模型的不同部分是這樣的:
public class ClassA
{
public int Id { get; set; }
public virtual ICollection<AtoBMapping> Mappings { get; set; }
}
public class ClassB
{
public int Id { get; set; }
public virtual ICollection<AtoBMapping> Mappings { get; set; }
}
public class AtoBMapping
{
public int Id { get; set; }
public virtual ClassA A { get; set; }
public virtual ClassB B { get; set; }
}
每當我試圖在客戶端創建ClassA和ClassB的的一個實例,並通過綁定將它添加到對方,當我嘗試將它添加到上下文中的Set時出現錯誤。該錯誤表示不允許從Mappings屬性中移除項目,並且我不真正瞭解這些來自哪裏。
第二部分可能有點過於抽象描述明智,如果有人需要更多的信息,我更願意添加它! PS:請不要建議Selftracking實體,我知道他們,但我真的會對純粹基於EF 4.2 POCOs的解決方案感興趣。
PPS:代碼是用手寫入這個窗口而不是實際使用的代碼,所以可能有東西丟失,但這不是我的問題的重點,所以我希望它就足夠了。
您能否將更高級別的抽象作爲您的服務接口公開?我通常喜歡將我的所有數據模型代碼保存在服務中,並在服務上公開某種業務邏輯操作。因此,我可能不會使用像CreatePerson,AddChild這樣的方法,而是使用更類似於軟件中正在執行的操作的東西(難以在不知道您最終希望服務執行什麼的情況下進行解釋,對不起!)。 – kmp
@ user1039947最終的目標功能是管理類似這樣的數據 - 簡單的類有幾個1:n的關聯和更少的n:m關聯。大部分時間數據正在被添加而不是被編輯。 – UrbanEsc