我正在将带有Visual Studio的Entity Framework 5与Entity Framework Power Tools Beta 2一起对中等大小的数据库(〜100个表)进行反向工程。不幸的是,导航属性没有有意义的名称。例如,如果有两个表:CREATE TABLE Contacts ( ContactID INT IDENTITY (1, 1) NOT NULL, ... CONSTRAINT PK_Contacts PRIMARY KEY CLUSTERED (ContactID ASC)}CREATE TABLE Projects ( ProjectID INT IDENTITY (1, 1) NOT NULL, TechnicalContactID INT NOT NULL, SalesContactID INT NOT NULL, ... CONSTRAINT PK_Projects PRIMARY KEY CLUSTERED (ProjectID ASC), CONSTRAINT FK_Projects_TechnicalContact FOREIGN KEY (TechnicalContactID) REFERENCES Contacts (ContactID), CONSTRAINT FK_Projects_SalesContact FOREIGN KEY (SalesContactID) REFERENCES Contacts (ContactID), ...}这将生成如下所示的类:public class Contact{ public Contact() { this.Projects = new List<Project>(); this.Projects1 = new List<Project>(); } public int ContactID { get; set; } // ... public virtual ICollection<Project> Projects { get; set; } public virtual ICollection<Project> Projects1 { get; set; }}public class Project{ public Project() { } public int ProjectID { get; set; } public int TechnicalContactID { get; set; } public int SalesContactID { get; set; } // ... public virtual Contact Contact { get; set; } public virtual Contact Contact1 { get; set; }}我看到几个变种都比这更好:使用外键的名称:例如,最后一个下划线(FK_Projects_TechnicalContact-> TechnicalContact)之后的所有内容。尽管这可能是控制最多的解决方案,但是与现有模板集成起来可能会更加困难。使用与外键列相对应的属性名称:删除后缀ID(TechnicalContactID-> TechnicalContact)使用属性名称和现有解决方案的连接:示例TechnicalContactIDProjects(集合)和TechnicalContactIDContact幸运的是,可以通过将模板包括在项目中来修改模板。这些修改将不得不作出Entity.tt和Mapping.tt。由于缺乏智能感知和调试的能力来进行这些更改,我发现这很困难。串联属性名称(在上面的列表中排第三)可能是最容易实现的解决方案。如何在中更改导航属性的创建Entity.tt并Mapping.tt实现以下结果:public class Contact{ public Contact() { this.TechnicalContactIDProjects = new List<Project>(); this.SalesContactIDProjects = new List<Project>(); } public int ContactID { get; set; } // ...}
添加回答
举报
0/150
提交
取消