2010-09-21 39 views
0

我有一個名爲Client的EnityName,我需要它的集合名稱爲Clients,它必須是通用的,以便我可以從任何實體的EntityName獲取EntitySetName。它暴露在svc文件中,但似乎不在服務代理類中。如果我可以做到這一點,那麼我可以有一個通用的方法。從WCF數據服務中的EntityName獲取EntitySetName

public void Add<T>(IEnumerable<T> entitySet) 
{ 
    var myService = GetServiceContext(); 

    foreach (var entity in entitySet) 
    { 
     myService.AddObject(entity.GetType().Name -- NEEDS TO BE ENTITY SET NAME, entity); 
    } 

    myService.SaveChanges(SaveChangesOptions.Batch); 

} 

回答

3

這裏是我是如何實現它:

private static string ResolveEntitySet(Type type) 
    { 
     var entitySetAttribute = 
      (EntitySetAttribute) type.GetCustomAttributes(typeof (EntitySetAttribute), true).FirstOrDefault(); 

     if (entitySetAttribute != null) 
     { 
      return entitySetAttribute.EntitySet; 
     } 

     return null; 
    } 

的調用它的一個簡單的例子(類似於你的,但單個加載項):

public void Add<T>(T entity) 
    { 
     _entities.AddObject(ResolveEntitySet(entity.GetType()), entity); 
    } 

這裏在高峯我的「帳戶」實體在我的代理類中的外觀(在.NET 4中自動生成 - 我不必添加它,但它看起來像舊版本可能???)

[System.Data.Services.Common.EntitySetAttribute("Accounts")] 
[System.Data.Services.Common.DataServiceKeyAttribute("Id")] 
public partial class Account : System.ComponentModel.INotifyPropertyChanged 
{ 
+0

pefect,謝謝。 – Toby 2011-05-29 20:54:31

+0

嗨,我試過,但EntitySetAttribute不存在客戶端代理類。我確信我爲Service中的每個實體都添加了EntitySetAttribute。你是否需要做任何具體的工作才能讓它與客戶一起工作?你還使用什麼版本的WCF數據服務? – Toby 2011-05-30 13:16:45

+0

我在.Net Framework 4上。因爲EntitySetAttribute已經存在,所以我不必爲我的代理類做任何事情。很高興在這裏幫助! – lcrepas 2011-05-30 22:29:50