无法更新 EntitySet 因为它有一个 DefiningQuery
时间: 2024-03-11 13:51:35 浏览: 112
下面是一个使用存储过程更新包含 DefiningQuery 的 EntitySet 的示例:
1. 创建一个新的存储过程,该存储过程将更新需要修改的实体。
```sql
CREATE PROCEDURE UpdateEntitySet
@EntityID int,
@NewValue varchar(50)
AS
BEGIN
UPDATE EntitySet
SET Value = @NewValue
WHERE ID = @EntityID
END
```
2. 在实体模型中,将 EntitySet 映射到该存储过程。
```xml
<EntitySet Name="EntitySet" EntityType="Model.EntitySet" store:Type="Tables" store:Schema="dbo" store:Name="EntitySet">
<DefiningQuery>
SELECT [ID], [Value]
FROM [dbo].[EntitySet]
</DefiningQuery>
<CommandText>
exec UpdateEntitySet @EntityID=@ID, @NewValue=@Value
</CommandText>
</EntitySet>
```
在这个示例中,存储过程 UpdateEntitySet 接收两个参数:实体的 ID 和新的值。在 EntitySet 映射中,我们将 DefiningQuery 保留为只读的,而将更新操作委托给存储过程。这样,在更新 EntitySet 中的实体时,我们只需要调用该存储过程即可。
请注意,如果您使用的是 Code First 开发模式,您可以使用 [NotMapped] 特性将实体排除在 Code First 模型之外,以避免出现 DefiningQuery 相关的问题。
阅读全文