调整由EF逆向工程师生成的POCO

时间:2012-08-03 15:08:35

标签: entity-framework code-generation asp.net-mvc-4 partial-classes

我正在通过EF Power Tools从我的数据库生成POCO,并准备开始调整和扩展它们。

This Q/A gets me past最初的问题(如何添加部分内容)但我想知道提供的答案是否会因MVC4项目而改变。

但该答案专门针对验证。我还需要调整生成的构造函数 - 类似于this question。我的db模式实用程序构造我的用户对象,如下所示:

    public User()
    {
        this.Addresses = new List<Address>();
        this.Emails = new List<Email>();
        this.Institutions = new List<Institution>();
        this.Orders = new List<Order>();
        this.Phones = new List<Phone>();
    }

除了机构,这些都是正确的。用户可以拥有许多电话,电子邮件等。但只能属于一个机构。

我认为没有办法重新连接这个构造函数,这样就不会创建一个Institution列表。所以我创建了一个方法,添加了一个'Institution'(单数)属性并分配了INSTIT.SingleOrDefault,也许还有一些标记/处理.Count&gt; 1?

因此,我的部分类上的构造函数与生成的类的行为相同吗?它运行在一个新的?

THX

跟进re:代码生成背后的FK。我的机构可以通过用户身份字段根据“PrimaryContact”将许多用户和密钥返回主要联系人。

机构: CONSTRAINT [FK_Institutions_Users] FOREIGN KEY([idPrimaryContact])REFERENCES [dbo]。[Users]([ID])

用户:     CONSTRAINT [FK_Users_Institutions] FOREIGN KEY([idUserInstitution])REFERENCES [dbo]。[机构]([ID])

1 个答案:

答案 0 :(得分:2)

EF电动工具正在创建这种关系,因为数据库允许用户拥有多个机构。我假设这是因为您的机构表上有一个User ID的FK。如果这确实是1:1或1:0.1关系,那么您可能应该更改数据库,以便User表具有到Institution表的FK(如果它是可选的则可为空)。

如果这不是一个选项,那么还有其他一些方法可以做到这一点:

您是否需要能够以模板化的方式或仅通过这个单一实体来实现这一目标?

如果您需要反复执行此操作,可能需要尝试更改生成实体对象的TT文件。关于此事Rowan Miller had an excellent post

无论哪种方式,您都可以像这样修改项目:

 public virtual List<Institution> Institutions { get; set; }

public Institution Institution
{
    get { return Institutions.SingleOrDefault(); }
}

然后只绑定到您创建的Institution属性。