基于适当规范化表的EF4数据库第一模型设计

时间:2011-06-07 04:16:33

标签: asp.net entity

我在我的项目中使用数据库中的表创建了一个概念模型。这个表与数据库中的其他一些表有关,我不会在项目中创建模型(表格很大,是为另一个应用程序设计的)。相反,我的DBA已经创建了一些存储过程供我使用,它将从这些表中返回我需要的相关数据(使用复杂类型)。

概念模型有三个属性,映射到表中的三个ID列(相关表的FK)。在我的项目视图中,我将模型绑定到gridview,因此带ID的字段值不是很有用。为此,我添加了上面提到的存储过程并将函数导入到复杂类型,然后将复杂类型属性添加到每个复杂类型的模型中。这没用。我一直收到错误3004:映射片段的问题......其中复杂类型属性未映射到模型中的值。

以下是我的表格的示例,其中包含一个复杂类型属性:

DisplayID
StoreID = StoreID,StoreName,StoreLocation **
订单ID
产品ID
DisplayLocation
显示尺寸

** StoreID是Complex Property Type,StoreID,StoreName,StoreLocation构成ComplexType;我将Complex Type的StoreID映射到数据库中表的StoreID。

我上面的场景并不适合我在添加复杂属性类型时看到的示例。我见过的例子如下:

DisplayID
Store = StoreName,StoreLocation
为了
产品
DisplayLocation
显示尺寸

我是否需要更改数据库中的表结构,如上面的示例?我应该在数据库中为每个复杂类型创建表吗?需要知道为什么我可以说服我的DBA使用我需要的列而不是ID列,并创建新表来代替他为我创建的存储过程。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您似乎尝试将导航属性“StoreID”映射到不受支持的复杂类型(请参阅Complex Type documentation)。复杂类型实际上是对您实体的标量属性进行分组(或者您可以将它们映射到存储过程o / p&然后它们可以在独立基础上使用)。

我建议您使用视图而不是存储过程来获取数据(并以与在实体模型中使用表格相同的方式使用视图 - 因此store将是视图)。我相信,很容易说服你的DBA查看视图而不是直接访问表格。