2012-08-31 26 views
7

Estoy utilizando EF con una base de datos SQL Server. He creado una vista y un disparador Instead Of Insert para ese punto de vista que se ve así:Entity Framework con En lugar de triggers

insert into Target (value, someFk) 
select value, 4 from inserted 
select id from Target where @@ROWCOUNT > 0 and id = scope_identity() 

Me asignan la vista en un edmx EF. Cuando intento agregar una entidad consigo la siguiente excepción cuando llamo SaveChanges():

No se puede actualizar 'TargetView' la EntitySet porque tiene un DefiningQuery y no existe ningún elemento en el elemento para soportar la corriente operación.

La vista tiene una columna de identidad marcada en la asignación.

¿Alguna sugerencia?

Respuesta

3

Si abre el archivo EDMX con un editor xml, en la sección donde se define TargetView tendrá algunos xml similares a los siguientes;

<EntitySet Name=".." 
      EntityType=".." 
      store:Type="Views" 
      store:Schema=".." 
      store:Name=".."> 
<DefiningQuery>SELECT ....</DefiningQuery> 

Necesita cambiar esta sección xml para tener operaciones CRUD;

<EntitySet Name=".." 
      EntityType=".." 
      store:Type="Tables" 
      Schema=".." /> 
+1

+1 ver también este enlace http://smehrozalam.wordpress.com/2009/08/12/entity-framework-creating-a-model-using-views-instead-of-tables/ – StuartLC

+0

@ gran artículo nonnb que describe métodos alternativos; gracias por compartir. – daryal

+0

Esto funciona, pero esto es terriblemente incorrecto. Hope EF 5.0 agregará algunas mejoras aquí. – Jaster