这是我正在使用的基本模式的精简示例。我意识到这个例子很复杂,但有一些原因正在使用这个模式,这对于描述我看到的问题并不重要。
另外值得注意的是:我使用的是数据库优先。
团队(表)
ID
名称
球员(表)
Id
TeamId
年份
姓名
职位
比赛(表)
Id
日期
HomeTeamId
客场TeamId
GameHomePlayer_VW (View)
GameId(在 EDMX 中定义为 PK)
HomePlayerId
视图 GameHomePlayer_VW 定义为:
SELECT
Game.Id,
Player.Id
FROM Game
LEFT OUTER JOIN Player
ON
Game.HomeTeamId = Player.TeamId AND
YEAR(Game.Date) = Player.Year
(如果你很好奇还有一个 GameAwayPlayer_VW :))
Game和之间的 EDMX 关联GameHomePlayer_VW:
Referential Constraint Game -> GameHomePlayer_VW
End1 Multiplicity 0..1 (Zero or One of GameHomePlayer_VW)
End1 Navigation Property Game
End1 OnDelete None
End1 Role Name GameHomePlayer_VW
End2 Multiplicity 1 (One of Game)
End2 Navigation Property GameHomePlayer_VW
End2 OnDelete None
End2 Role Name Game
Name GameHomePlayer_VWGame
Game和GameHomePlayer_VW由 EF 生成的类:
public partial class Game
{
public int Id { get; set; }
public DateTime Date { get; set; }
public Nullable<int> HomeTeamId { get; set; }
public Nullable<int> AwayTeamId { get; set; }
public virtual Team HomeTeam { get; set; }
public virtual Team AwayTeam { get; set; }
public virtual GameHomePlayer_VW GameHomePlayer_VW { get; set; }
public virtual GameAwayPlayer_VW GameAwayPlayer_VW { get; set; }
}
public partial class GameHomePlayer_VW
{
public int GameId { get; set; }
public Nullable<int> PlayerId { get; set; }
public virtual Game Game { get; set; }
public virtual Player Player { get; set; }
}
我遇到的问题是,当我尝试使用 EF 删除游戏实体时,收到以下错误:
无法更新 EntitySet 'GameHomePlayer_VW',因为它有一个 DefiningQuery 并且<DeleteFunction>元素中不存在<ModificationFunctionMapping>支持当前操作的元素。
还有其他实体引用游戏并使用级联删除被删除。
我尝试使用这篇文章中的解决方案没有成功:无法更新 EntitySet - 因为它有一个 DefiningQuery 并且不存在 <UpdateFunction> 元素
我还尝试连接一个存储过程,该过程采用 EDMX 定义的 PK 并返回 0。
我尝试初始化我的 DbContext 类的新实例以删除它,如下所示,但仍然遇到同样的问题。
在允许添加/更新/删除引用它的实体的同时,是否有人对维护基于游戏日期的动态链接有任何建议?
相关分类