gpt4 book ai didi

c# - Entity Framework Code First 在创建 1 :n relationship 时在数据库中生成两个外键列

转载 作者:行者123 更新时间:2023-11-30 18:17:58 25 4
gpt4 key购买 nike

我想使用 Entity Framework 根据用于创建关系的命名约定创建 1:n 关系。我正在使用代码优先。 Entity Framework 忽略约定,总是创建两个外键列,而不是一个:

  • StreamWorkerUser_Id(我只想要这一列)
  • StreamWorkerUser_Id1

配置类配置如下:

AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;

我正在使用 Microsoft.Identity Framework,所有模型都有自定义类。

我的 DbContext 类很简单,如下所示。

public class StreamWorkerDataContext : IdentityDbContext<StreamWorkerUser, StreamWorkerRole, int, StreamWorkerUserLogin, StreamWorkerUserRole, StreamWorkerUserClaim>
{
public DbSet<Task> Tasks { get; set; }
}

任务模型:

public class Task : StreamWorkerEntity
{
public StreamWorkerUser StreamWorkerUser { get; set; }
}

StreamWorkerUser 模型:

public class StreamWorkerUser : IdentityUser<int, StreamWorkerUserLogin, StreamWorkerUserRole, StreamWorkerUserClaim>
{
public virtual List<Task> Tasks { get; set; } // also tested ICollection
}

Task 类继承自该基类型,这里还定义了两个 StreamWorkerUser 类型的属性(但这些列在数据库中正确生成。):

public class StreamWorkerEntity
{
[Key]
public int Id { get; set; }
public DateTimeOffset Created { get; set; }
public DateTimeOffset Updated { get; set; }
public StreamWorkerUser Creator { get; set; }
public StreamWorkerUser LastEditor { get; set; }
}

CreatorLastEditor 属性是否有可能干扰数据库迁移?

我是否正确理解约定?

更多信息:

  • Entity Framework 版本 6.1.3
  • Microsoft.AspNet.Identity.Core 2.2.1
  • Microsoft.AspNet.Identity.EntityFramework 2.2.1
  • ASP.NET 4 MVC 5
  • Azure 云中的 SQL Server
  • C# 6.0
  • .NET Framework 4.5.2
  • 所有这些代码都在一个类库中

最佳答案

所以您可能会认为 EF 在这种情况下:

 public StreamWorkerUser Creator { get; set; }
public StreamWorkerUser LastEditor { get; set; }

将创建 creator_id 和 lasteditor_id,但它不会创建,因为 EF 使用了类名并创建了 StreamWorkerUser_Id 和 StreamWorkerUser_Id1,因为已经使用了 StreamWorkerUser_Id。默认情况下,如果您按类(而不是 int 字段)建立关系,EF 会根据类名(而不是字段名)生成其列名。

如果你想为那些 FK 指定列名,你可以这样做:

    public int CreatorId { get; set; } //this field name will be column name
[ForeignKey("StreamWorkerUser")]
public StreamWorkerUser Creator { get; set; }

public int EditorId { get; set; } //this field name will also be column name
[ForeignKey("StreamWorkerUser")]
public StreamWorkerUser Editor { get; set; }

关于c# - Entity Framework Code First 在创建 1 :n relationship 时在数据库中生成两个外键列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42542490/

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