0

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

这个 Q/A 让我超越了最初的问题(如何添加部分),但我想知道提供的答案是否会因 MVC4 项目而改变。

但这个答案专门与验证有关。我还需要调整生成的构造函数——类似于这个问题。我的数据库模式,该实用程序构造我的用户对象,如下所示:

    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>();
    }

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

我认为没有办法重新连接这个构造函数,这样就不会创建机构列表。因此,我将创建一个添加“机构”(单数)属性并分配机构.SingleOrDefault 并可能在.Count>1 上进行一些标记/处理的方法?

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

谢谢

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

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

用户:约束 [FK_Users_Institutions] 外键 ([idUserInstitution]) 参考 [dbo].[Institutions] ([ID])

4

1 回答 1

2

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

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

您是否需要能够以模板方式或仅在单个实体上执行此操作?

如果您需要重复执行此操作,您可能需要尝试更改生成实体对象的 TT 文件。 Rowan Miller 对此发表了一篇出色的文章

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

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

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

然后只需绑定到您创建的机构属性。

于 2012-08-03T15:35:12.863 回答