Entity добавляет к названию поля “1”

90
12 марта 2021, 06:10

При добавлении миграции в таблицу дублируется поле (но в конце с 1):

            CreateTable(
            "public.t_users",
            c => new
                {
                    id = c.Int(nullable: false, identity: true),
                    login = c.String(),
                    password = c.String(),
                    name = c.String(),
                    role_id = c.Int(nullable: false),
                    role_id1 = c.Int(),
                })
            .PrimaryKey(t => t.id)
            .ForeignKey("public.t_roles", t => t.role_id1)
            .Index(t => t.role_id1);

Хотя в БД оно одно:

-- Table: public.t_users
-- DROP TABLE public.t_users;
CREATE TABLE public.t_users
(
    name character varying(100) COLLATE pg_catalog."default" NOT NULL,
    login character varying(100) COLLATE pg_catalog."default" NOT NULL,
    password character varying(100) COLLATE pg_catalog."default" NOT NULL,
    role_id integer NOT NULL,
    id integer NOT NULL DEFAULT nextval('t_users_id_seq'::regclass)
)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;
ALTER TABLE public.t_users
    OWNER to psp;

Было бы хорошо, если оно было бы только при миграции...но это поле всплывает и при сохранении в БД...и естественно вылетает ошибка от Entity:

BaseMessage = "column \"role_id1\" of relation \"t_users\" does not exist"

model:

namespace Loyalty.DAL.Models.Authorize
{
    [Table("t_users", Schema = "public")]
    public class User
    {
        [Key]
        public int? id { get; set; }
        public string login { get; set; }
        public string password { get; set; }
        public string name { get; set; }
        public int role_id { get; set; }
        public virtual Role role { get; set; }
    }
}

Объясните пожалуйста "как так", и зачем он (Entity) добавляет это поле?

Answer 1

Нужно явно указать, что поле является внешним коючем.

[Table("t_users", Schema = "public")]
public class User
{
    [Key]
    public int? id { get; set; }
    public string login { get; set; }
    public string password { get; set; }
    public string name { get; set; }
    [ForeignKey(nameof(role))]
    public int role_id { get; set; }
    public virtual Role role { get; set; }
}
READ ALSO
WPF data binding

WPF data binding

Работал когда-то с wpf, прошел курс, написал проект и забылИ вот, опять имею с ним дело

79
SQL запрос по двум столбцам

SQL запрос по двум столбцам

Есть таблица tb_productsНадо воспроизвести поиск по двум столбцам: title и description

99
Запрос из трех таблиц

Запрос из трех таблиц

Пытаюсь выполнить вот такой просто запрос

93