EF Core проблема миграции с InverseProperty - PullRequest
0 голосов
/ 06 ноября 2019

Я хочу сохранить идентификатор пользователя в качестве внешнего ключа в других таблицах при создании или изменении записей. Для этого я использовал InverseProperty. При создании миграции у меня проблема в том, что внешний ключ создан неправильно. Слишком много полей создано в базе данных.

Я использую ef core 3.0.

public class User
{
    [Key]
    [Column("id")]
    public long Id { get; set; }

    [Column("usergroup_id")]
    public long UsergroupId { get; set; }
    public Usergroup Usergroup { get; set; } = null!;

    [Required]
    [Column("user_name")]
    public string? Username { get; set; }

    [Required]
    [Column("password")]
    public string? Password { get; set; }

    [Column("token")]
    public string? Token { get; set; }

    [Column("created_user_id")]
    public long? CreatedUserId { get; set; }
    public User? CreatedUser { get; set; }

    [Column("created")]
    public DateTime? Created { get; set; }

    [Column("updated_user_id")]
    public long? UpdatedUserId { get; set; }
    public User? UpdatedUser { get; set; }

    [Column("updated")]
    public DateTime? Updated { get; set; }

    [InverseProperty("CreatedUser")]
    public ICollection<User>? TblCreatedUser { get; } = null!;

    [InverseProperty("UpdatedUser")]
    public ICollection<User>? TblUpdatedUser { get; } = null!;
}

public class Usergroup
{
    [Key]
    [Column("id")]
    public long Id { get; set; }

    [Required]
    [Column("name")]
    public string? Name { get; set; }

    [Column("created_user_id")]
    public long? CreatedUserId { get; set; }
    public User? CreatedUser { get; set; } = null!;

    [Column("created")]
    public DateTime? Created { get; set; }

    [Column("updated_user_id")]
    public long? UpdatedUserId { get; set; }
    public User? UpdatedUser { get; set; } = null!;

    [Column("updated")]
    public DateTime? Updated { get; set; }

    [InverseProperty("Usergroup")]
    public ICollection<User> User { get; } = null!;
}

DBContext:

        modelBuilder.Entity<Usergroup>(entity =>
        {
            entity.HasKey(e => e.Id)
                .HasName("PK_tblUsergroup");

            entity.HasIndex(e => e.Name)
                .HasName("UQ_tblUsergroup_UsergroupName")
                .IsUnique();
        });

        modelBuilder.Entity<User>(entity =>
        {
            entity.HasKey(e => e.Id)
                .HasName("PK_tblUser");

            entity.HasIndex(e => e.Username)
                    .HasName("UQ_tblUser_Username")
                    .IsUnique();
        });

Миграция:

Поля CreatedUserId1 и updatedUserId1 в tblUsergroup должныне существует. В других таблицах это правильно.

migrationBuilder.CreateTable(
    name: "tblUsergroup",
    columns: table => new
    {
        id = table.Column<long>(nullable: false)
            .Annotation("SqlServer:Identity", "1, 1"),
        name = table.Column<string>(nullable: true),
        created_user_id = table.Column<long>(nullable: true),
        CreatedUserId1 = table.Column<long>(nullable: true),
        created = table.Column<DateTime>(nullable: true),
        updated_user_id = table.Column<long>(nullable: true),
        UpdatedUserId1 = table.Column<long>(nullable: true),
        updated = table.Column<DateTime>(nullable: true)
    },
    constraints: table =>
    {
        table.PrimaryKey("PK_tblUsergroup", x => x.id);
    });

migrationBuilder.CreateTable(
    name: "tblUser",
    columns: table => new
    {
        id = table.Column<long>(nullable: false)
            .Annotation("SqlServer:Identity", "1, 1"),
        usergroup_id = table.Column<long>(nullable: false),
        user_name = table.Column<string>(nullable: true),
        password = table.Column<string>(nullable: false),
        token = table.Column<string>(nullable: true),
        created_user_id = table.Column<long>(nullable: true),
        created = table.Column<DateTime>(nullable: true),
        updated_user_id = table.Column<long>(nullable: true),
        updated = table.Column<DateTime>(nullable: true)
    },

1 Ответ

0 голосов
/ 06 ноября 2019

попробуйте этот код

[Column("created_user_id")]
public long? CreatedUserId { get; set; }
[ForeignKey("CreatedUserId")]
public User? CreatedUser { get; set; } = null!;     
[Column("updated_user_id")]
public long? UpdatedUserId { get; set; }
[ForeignKey("UpdatedUserId")]
public User? UpdatedUser { get; set; } = null!;
...