gpt4 book ai didi

c# - Entity Framework 一对零或一外键关联

转载 作者:太空宇宙 更新时间:2023-11-03 15:16:31 26 4
gpt4 key购买 nike

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

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<Login>
{
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].[TeamMember_Id] 上创建了一个外键。我已经尝试用 ForeignKey 属性装饰我的导航属性,但这没有用。有没有办法让它在 [Logins].[TeamMember_Id] 上创建外键?

最佳答案

我最终创建了一对多关系,使用 [NotMapped] 属性登录。

我的类(class):

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<Login> Logins { get; set; }
}

具有以下配置:

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

关于c# - Entity Framework 一对零或一外键关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38868054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com