实体框架使用视图和存储过程

时间:2009-04-23 20:50:27

标签: entity-framework .net-3.5

我的数据库中有以下基本表结构(我不允许更改):

地址
(PK)AddressId
线路1
...


(PK)PersonId
(FK)AddressId
名字
......

学生
(PK)StudentId
(FK)PersonId
StudentNumber
...

我想使用Table-per-Type方法将Person和Student组合成Student实体。但是,这些表不符合EFs限制,即子表(Student)必须具有PK和FK是同一列。与我的数据库不同,它们是单独的列。

我的下一个想法是创建一个视图并在视图外创建一个实体。我创建了一个名为StudentView的视图,其中包含连接和所有列。然后我将此视图导入EF模型。一切都很好,直到我尝试更新。由于视图无法更新,我创建了插入/更新/删除存储过程并将它们绑定到我的学生实体(我为所有FK关系做了额外的sp参数)。

但是,现在我收到以下错误:

  

错误2027:如果EntitySet或AssociationSet包含函数映射,则EntityContainer中的所有相关实体和AssociationSets也必须定义函数映射。

我无法在任何地方找到这方面的信息。在我看来,这意味着如果一个实体使用存储过程,所有实体都会(或至少所有被引用的实体,在我的情况下等同于大致所有实体)。但是,我从EF收到的其他错误消息一直在欺骗。

有谁知道如何通过这个?此外,关于如何在我的案例中使用Table-per-Type的任何建议(我认为不可能)也会有所帮助。

1 个答案:

答案 0 :(得分:1)

我想出来了。事实证明,这是因为我设置了一些关系为0..1:1。看来,当发生这种情况时,任何具有该关系类型的东西也必须使用存储过程。将关系设置回0..1:*解决了我的问题。