En base, les vues sont des éléments en lecture seule. Par conséquent, l'Entity Framework ne peut pas générer de requêtes INSERT / UPDATE / DELETE sur une vue. Pour les vues, dans le cas d'un CUD, il faudra donc forcément passer une fonction ssdl:
<Function Name="DeleteMember" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false"
ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo">
<Parameter Name="CustomerID" Type="nchar" Mode="In" />
</Function>
Ou en définissant directement le code sql dans le ssdl.
<Function Name="DeleteMember" IsComposable="false">
<CommandText>
DELETE Members
WHERE CustomerId = @CustomerId
DELETE Customers
WHERE CustomerId = @CustomerId
</CommandText>
<Parameter Name="CustomerID" Type="nchar" Mode="In" />
</Function>
Attention, une opération de type CUD sur une vue sans fonction ssdl ne génèrera une erreur qu'à l'exécution.
Comme pour les fonctions ssdl, les vues peuvent être directement définies dans le ssdl. Pour cela, il faut utiliser la balise DefiningQuery dans le ssdl:
<EntitySet Name="MyCustomView" EntityType="TestModel.Store.MyCustomView">
<DefiningQuery>
SELECT …
</DefiningQuery>
</EntitySet>