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

标签 c# entity-framework ef-code-first foreign-keys entity-framework-6

我正在更改现有应用程序的后端以使用 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/

相关文章:

c# - 返回通过引用传递的参数是否安全?

entity-framework - ASP.Net 核心 : Cannot open localdb requested by the login

sql - 如何在 Entity Framework 中发送常规内联SQL

c# - 在将参数传递给类的构造函数的顺序上是否有任何协议(protocol)或同意?

javascript - 对丢弃的 http 连接进行重复处理

c# - 检测是否显示工具提示?

entity-framework - Entity Framework : Using transactions and rollbacks. .. 可能吗?

entity-framework - EntityFramework代码优先和循环一对多引用

c# - DbContext继承更新-数据库错误

c# - 从 WCF 服务操作返回 EF4 POCO 时引发 CommunicationException