entity framework一对多或一个外键关联

我正在更改现有应用程序的后端以使用Entity Framework Code First。 我已经使用Visual Studio 2015中的内置工具基于我现有的数据库生成POCO类。 这在大多数情况下都是完美的,除了两个类,一对一或零关系。 这些是我的(简化)课程:

public class Login { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public int TeamMemberId { get; set; } public virtual TeamMember TeamMember { get; set; } } public class TeamMember { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public virtual Login Login { get; set; } } 

使用以下配置:

 public class LoginTypeConfiguration : EntityTypeConfiguration { public LoginTypeConfiguration() { this.HasRequired(e => e.TeamMember) .WithOptional(e => e.Login); this.Property(e => e.TeamMemberId) .HasColumnName("TeamMember_Id"); } } 

这导致以下迁移:

 CreateTable( "dbo.Logins", c => new { Id = c.Int(nullable: false, identity: true), TeamMember_Id = c.Int(nullable: false), }) .PrimaryKey(t => t.Id) .ForeignKey("dbo.TeamMembers", t => t.Id) .Index(t => t.Id); 

出于某种原因,EF在[Logins].[Id]上创建了一个外键[Logins].[Id]而不是[Logins].[TeamMember_Id] 。 我已经尝试使用ForeignKey属性装饰我的导航属性,但这不起作用。 有没有办法让它在[Logins].[TeamMember_Id]上创建一个外键[Logins].[TeamMember_Id]呢?

我最终创建了一对多关系,并为Login提供了[NotMapped]属性。

我的课程:

 public class Login { public int TeamMemberId { get; set; } public virtual TeamMember TeamMember { get; set; } } public class TeamMember { [NotMapped] public virtual Login Login { get { return Logins.FirstOrDefault(); } } public virtual ICollection Logins { get; set; } } 

使用以下配置:

 public class LoginTypeConfiguration : EntityTypeConfiguration { public LoginTypeConfiguration() { this.Property(e => e.TeamMemberId) .HasColumnName("TeamMember_Id"); } } 

为此,您可以像这样首先编写代码。 Entity Framework将自动为您生成外键TeamMemberId 。 有关更多信息: entity framework教程 – 代码优先约定

 public class Login { public int Id { get; set; } //foreign key declaration public int TeamMemberId { get; set; } public TeamMember TeamMember { get; set; } } public class TeamMember { public int TeamMemberId { get; set; } public Ilist Login { get; set; } }