2

这是我找不到任何有用的场景。也许我是第一个考虑这样做的人:

方法:数据库优先

数据库:SQL Server 2008 R2

项目:DLL(数据访问)

我有一个数据访问库,它封装了对数据库的所有访问以及 biz 功能。数据库有很多表,所有表都有以下 2 列:

  • last_updated_on : 小日期时间
  • last_updated_by : nvarchar(50)

该项目包含几个模型(或 edmx 文件),其中仅包含映射到它们所代表的表的相关实体。由于每个表都包含 last_updated_* 的列,因此我在其中一个模型中创建了一个复杂类型,如下所示:

复杂类型:历史

  • 由(字符串:last_updated_by
  • 开启(日期时间:last_updated_on

问题是它只能在我定义它的模型中使用。

A)如果我尝试在其他模型中使用它,它不会在设计器中显示 B)如果我在其他模型中定义它,我会得到错误历史已经定义

是否有任何解决方案可以使在一个模型中定义的 History 复杂类型可以被其他模型重用?

4

1 回答 1

0

我试图做几乎完全相同的事情(我的数据库字段是“created”、“creatorId”、“modified”和“modifierId”,封装成一个复杂类型 RecordHistory)并在找到答案之前遇到了这个问题。 ..

http://msdn.microsoft.com/en-us/data/jj680147#Mapping概述了解决方案,但由于它相当简单,我也会在这里介绍基础知识:

  1. 首先像你一样创建复杂类型(在.edmx Designer中选择字段,右键,选择“重构为新的复杂类型”)

  2. 在 .edmx 设计器(不是模型浏览器)中,右键单击具有相同公共列的另一个表/实体,然后选择添加 -> 复杂属性

  3. 新属性将自动分配一个复杂类型。如果您有 1 个以上的复杂类型,请编辑新属性的属性并适当设置类型

  4. 再次右键单击表/实体(在模型浏览器或设计器中)并选择表映射

  5. 更新每个公共字段的值/属性列(在我的例子中,将它们从“modified:DateTime”更改为“history.modified:DateTime”)

  6. 从您的实体中删除旧的公共字段,只保留复杂类型

于 2013-05-22T19:48:25.787 回答