简体   繁体   English

EF代码优先-使用InverseProperty时如何添加外键属性?

[英]EF Code First - How to add foreign key property when using InverseProperty?

I have the code first model defined below. 我在下面定义了代码优先模型。

There are two relationships between Project and TeamMember: Project和TeamMember之间存在两种关系:

  1. many-to-many - TeamMember can work on many projects. 多对多-TeamMember可以处理许多项目。 Project can have many TeamMembers. 项目可以有许多TeamMembers。
  2. one-to-many - Project always has one TeamMember as Manager. 一对多-项目始终只有一个TeamMember作为经理。

     public class Project { public Guid ProjectId { get; set; } [InverseProperty("ManagedProjects"), Required] public virtual TeamMember Manager { get; set; } // 2 public virtual List<TeamMember> TeamMembers { get; set; } // 1 } public class TeamMember { public Guid TeamMemberId { get; set; } public virtual List<Project> Projects { get; set; } // 1 [InverseProperty("Manager")] public virtual List<Project> ManagedProjects { get; set; } // 2 } 

This model generates the Project table definition shown below. 此模型生成如下所示的“项目”表定义。

CREATE TABLE [dbo].[Project] (
  [ProjectId]            UNIQUEIDENTIFIER NOT NULL,
  [Manager_TeamMemberId] UNIQUEIDENTIFIER NOT NULL,
  CONSTRAINT [PK_dbo.Project] PRIMARY KEY CLUSTERED ([ProjectId] ASC),
  CONSTRAINT [FK_dbo.Project_dbo.TeamMember_Manager_TeamMemberId] FOREIGN KEY
    ([Manager_TeamMemberId]) REFERENCES [dbo].[TeamMember] ([TeamMemberId]));

I need to extend Project with a foreign key property for Manager but can not figure out to do this. 我需要使用Manager的外键属性来扩展Project,但无法确定要执行此操作。

public Guid ManagerId { get; set; } // 2
[InverseProperty("ManagedProjects")]
public virtual TeamMember Manager { get; set; } // 2

The above code does not work as it just generates a ManagerId field in the Project table. 上面的代码不起作用,因为它只是在Project表中生成一个ManagerId字段。 I Have tried different combinations of ForeignKey og InverseProperty without any luck. 我尝试了ForeignKey和InverseProperty的不同组合,但没有任何运气。

Any suggestions? 有什么建议么?

Next code should create join table for many-to-many and 'Project' table will have foreign key on this table. 接下来的代码应为多对多创建连接表,并且“ Project”表将在此表上具有外键。

public class Project
{
    public Guid ProjectId { get; set; }

    public virtual TeamMember Manager { get; set; } // 2

    [InverseProperty("Projects")]
    public virtual List<TeamMember> TeamMembers { get; set; } // 1
}

public class TeamMember
{
    public Guid TeamMemberId { get; set; }

    [InverseProperty("TeamMembers")]
    public virtual List<Project> Projects { get; set; } // 1

    [InverseProperty("Manager")]
    public virtual List<Project> ManagedProjects { get; set; } // 2
}

I think that impossible have many-to-many relationship without join table. 我认为没有连接表就不可能有多对多的关系。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用EF6 Code First将外键属性公开给具有导航属性的现有实体 - How to expose Foreign Key property to existing entity having navigational property using EF6 Code First 如何使用 EF 代码优先方法将单个记录添加到具有外键的表中 - how to add a single record in to table which has foreign key using EF code first approach 在代码优先EF 6中使用外键一对一关系 - 1 to 1 relationship using foreign key in code first EF 6 防止外键属性在EF Code First中被重置 - Prevent foreign key property from being reset in EF Code First C#EF Code First 1:1可选关系外键属性 - C# EF Code First 1:1 optional relationship foreign key property 更新实体以首先在EF代码中公开现有的外键属性? - Update Entity to expose existing foreign key property in EF code first? EF的代码优先,如何在不设置数据库表之间外键的情况下定义导航属性关系 - Code first of EF, how to define navigation property relationship without setting foreign key between table in database 使用Code First EF4.1保存时如何向属性添加默认值? - How can I add default values to a property when saving using Code First EF4.1? 外键作为EF Code First中的主键? - Foreign key as primary key in EF Code First? 首先使用EF代码错误地创建了外键 - Foreign key is created incorrrectly using EF code first
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM