2010-03-15 18 views
19

Haciendo mis primeros pasos en Servicios RIA (VS2010Beta2) y encontré este problema: creó un Modelo EF (no POCOs), un repositorio genérico encima y un Servicio RIA (alojado en una aplicación ASP.NET MVC) e intentado obtener datos desde la aplicación ASP.NET MVC: funcionó bien. Siguiente paso: cliente de Silverlight. Tienes una referencia a la RIAService (a través de su contexto), consultada por todos los registros del repositorio y los metió en la aplicación, así SL (utilizando este ejemplo de código):RIA Services EntitySet no admite la operación 'Editar'

private ObservableCollection<Culture> _cultures = new ObservableCollection<Culture>(); 
public ObservableCollection<Culture> cultures 
{ 
    get { return _cultures; } 
    set 
    { 
    _cultures = value; 
    RaisePropertyChanged("cultures"); 
    } 
} 

....

//Get cultures    
EntityQuery<Culture> queryCultures = from cu in dsCtxt.GetAllCulturesQuery() 
              select cu; 
loCultures = dsCtxt.Load(queryCultures); 
loCultures.Completed += new EventHandler(lo_Completed); 

....

void loAnyCulture_Completed(object sender, EventArgs e) 
{ 
    ObservableCollection<Culture> temp= 
    new ObservableCollection<Culture>loAnyCulture.Entities); 
       AnyCulture = temp[0]; 
} 

el problema es el siguiente: siempre que intente corregir algunos datos de un registro (en este ejemplo, el primer registro) me sale este error: este EntitySet de tipo 'Cultura' no admite la operación 'Editar'.

Pensé que hice algo raro y traté de crear un objeto de tipo Cultura y asignarle un valor: ¡funcionó bien!

¿Qué me falta? ¿Debo declarar un EntitySet? ¿Tengo que marcarlo? ¿Tengo que ... qué?

Gracias de antemano

Respuesta

42

Resulta que en la clase DomainService tiene que aplicar (o al menos para marcar "métodos de marcador de posición") como "Editar", "Borrar", ... por ejemplo

[Delete] 
public void DeleteCulture(Culture currentCulture) 
{ 
    throw new NotImplementedException("UpdateCulture not Implemented yet"); 
} 
[Insert] 
public void InsertCulture(Culture newCulture) 
{ 
    throw new NotImplementedException("InsertCulture not Implemented yet"); 
} 

De esta forma, la clase OrganizationDomainContextEntityContainer crea un EntitySet con el parámetro EntitySetOperations.All (lo que significa que todas las operaciones CUD están disponibles).

Espero que sea útil para alguien en el futuro.

+0

muy útil para mí :) –

+0

@Greco: ¡me alegro de poder ayudar! –

+0

@SavvasSopiadis - buen trabajo, gracias! – Rob

Cuestiones relacionadas