使用Entity Framework和WCF Ria Services开发SilverLight之3:Map
在上一篇中《使用Entity Framework和WCF Ria Services开发SilverLight之2:POCO》,我们将映射交给edmx文件处理。如下:
该文件是由EF框架自动生成的,通过查看原始文件,我们可以看到EF框架为我们建立了实体类间的各种映射。现在,借助于EF4.1框架,我们可以进行更方便的进行手动映射。
1:清理SchoolData
首先,删除ModelSchool.edmx。
其次,由于不再使用edmx映射,我们将SchoolContext中数据库连接串,换成传统的连接串。即:
上图中的红框部分,换成:
相信你和我一样,非常熟悉这样的连接字符串。
二:手动建立Map
在SchoolModel中,我们建立一个Mapping子目录,将所有的映射类全部建立在这个位置。如DepartmentMap:
1 2 3 4 5 6 7 8 | public class DepartmentMap : EntityTypeConfiguration<Department> { public DepartmentMap() { this.HasKey(t => t.DepartmentID); this.ToTable( "Department" ); } } |
需要注意的一点,理论上,我们可以借助于Map,生成完全意义上的Poco,因为我们使用EF4.1框架,通过重写DbContext类型的OnModelCreating方法,如下:
1 2 3 4 5 | protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove<IncludeMetadataConvention>(); modelBuilder.Configurations. Add (new DepartmentMap()); } |
我们完全可以动态为POCO实体类生成EF所需要的各种映射关系。但是,很遗憾,在这里我们使用的Ria Service。在使用Ria Service的使用,必须要为Poco指定一个Key(这是一个BUG?),否则,我们会得到这样的一个错误:
1 | 错误 2 The entity 'Department' in DomainService 'DomainServiceSchool' does not have a key defined. Entities exposed by DomainService operations must have at least one public property marked with the KeyAttribute. SilverlightApplication20110612 |
而如果我们在使用别的应用,我指的是仅仅使用EF,则不会有这样的编译期错误出现。
所以,这是一个小小的瑕疵,请为POCO使用KEY特性。当然,别的映射关系我们可以在Map类中处理。
最后的运行效果为:
三:使用Entity Framework Power Tools CTP1自动生成POCO和映射
也许是考虑到手动生成POCO和映射太繁琐了,现在微软为我们提供了这样一个工具为我们自动生成POCO和映射。你需要到这里去下载它:http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d
安装完毕后,请首先生成一个C#类库项目,然后在这个类库项目上点右键,我们会发现多了一个菜单项:
然后,在下一界面,输入相应参数:
注意:一定要注册图中的红框部分。请选择第一项。如果我们使用sql server身份认证,则极有可能出现如下错误:
1 | System.Data.ProviderIncompatibleException: The provider did not return a ProviderManifestToken string. ---> System.InvalidOperationException: This operation requires a connection to the 'master' database. Unable to create a connection to the 'master' database because the original database connection has been opened and credentials have been removed from the connection string. Supply an unopened connection. ---> System.Data.SqlClient.SqlException: 用户 'sa' 登录失败。 |
有博友曾经对此问题进行过讨论,但是仍旧无解,具体请见博文及文后回复《Entity Framework Code First使用者的福音 --- EF Power Tool使用记之二(问题探究)》
最后,该工具为我们生成的代码大致如下:
如果对手动映射感兴趣,还可以参考下列文章:
2:http://www.cnblogs.com/haogj/archive/2011/05/06/2038965.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架