2013-01-18 26 views
2

这里是我找不到任何有用的senario。也许我做这样的第一人称思考:实体框架4.1复杂类型在不同模型中的重用

方法:数据库首先

数据库:SQL Server 2008 R2的

项目:DLL(数据访问)

我有一个数据访问库,它封装了对数据库的所有访问以及商务功能。该数据库有许多表和所有表有以下两列:

  • last_updated_on:SMALLDATETIME
  • LAST_UPDATED_BY:为nvarchar(50)

该项目包含几种模式(或edmx文件),它们只包含映射到它们所代表的表格的相关实体。

复杂类型:历史

  • 通过(字符串:LAST_UPDATED_BY)由于每个表都包含列last_updated_ *我在模型是如下的一个创造了一个复杂类型
  • 开(日期时间:last_updated_on

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

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

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

回答

0

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

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

  1. 首先创建复杂的类型,你没有(请在领域.edmx设计器,右键单击,选择“Refactor into New Complex Type”)

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

  3. 新的属性将被自动分配一个复杂类型。如果你有超过1种复杂类型,编辑新的属性的属性和设置的类型适当

  4. 在桌子上/实体再次右键单击(无论是在模型浏览器或设计器),然后选择表映射

  5. 更新每个常用字段的值/属性列(在我的情况下,将它们从“modified:DateTime”更改为“history.modified:DateTime”)

  6. 从您的实体中删除旧的通用字段,只留下复杂的类型

+0

作为一个方面说明,看起来(即使EF5)你不能使用封装在复杂类型中的任何字段作为导航属性/外键 – DaveD