База данных Entity Framework 6 сначала содержит много разных отношений

c# ef-database-first entity-framework entity-framework-6 many-to-many

Вопрос

Я пытаюсь использовать EF6 и пытаюсь использовать отношения многих и многих.

Сначала использование базы данных - это моя база данных, основанная на скриптах.

CREATE TABLE [States] (
    Id int identity (1, 1) not null primary key,
    Name varchar(50) not null,
    Abbreviation varchar(2) not null
)
GO

CREATE TABLE Departments (
    Id int identity (1, 1) not null primary key,
    Name varchar(50),
)
GO

CREATE TABLE [Role] (
    Id int identity (1, 1) not null primary key,
    Name varchar(50)
)
GO

CREATE TABLE Employees (
    Id int identity (1, 1) not null primary key,
    FirstName varchar(50),
    LastName varchar(50),
    Email varchar(255),
    DepartmentId int constraint fk_Department_Id foreign key references Departments(Id)
)

GO

CREATE TABLE AssignedRoles (
    Id int identity (1, 1) not null primary key,
    EmployeeId int not null constraint fk_Employee_Id foreign key references Employees(Id),
    RoleId int not null constraint fk_Role_Id foreign key references [Role](Id),
)
GO

CREATE TABLE [Addresses] (
    Id int identity (1, 1) not null primary key,
    EmployeeId int not null,
    StreetAddress varchar(255),
    City varchar(55),
    StateId int not null,
    ZipCode varchar(10),
    CONSTRAINT fk_Employee_Id_Address foreign key (EmployeeId) REFERENCES [Employees](Id),
    CONSTRAINT fk_State_Id foreign key (StateId) REFERENCES [States](Id)
)
GO

Мой код:

CREATE TABLE [States] (
    Id int identity (1, 1) not null primary key,
    Name varchar(50) not null,
    Abbreviation varchar(2) not null
)
GO

CREATE TABLE Departments (
    Id int identity (1, 1) not null primary key,
    Name varchar(50),
)
GO

CREATE TABLE [Role] (
    Id int identity (1, 1) not null primary key,
    Name varchar(50)
)
GO

CREATE TABLE Employees (
    Id int identity (1, 1) not null primary key,
    FirstName varchar(50),
    LastName varchar(50),
    Email varchar(255),
    DepartmentId int constraint fk_Department_Id foreign key references Departments(Id)
)

GO

CREATE TABLE AssignedRoles (
    Id int identity (1, 1) not null primary key,
    EmployeeId int not null constraint fk_Employee_Id foreign key references Employees(Id),
    RoleId int not null constraint fk_Role_Id foreign key references [Role](Id),
)
GO

CREATE TABLE [Addresses] (
    Id int identity (1, 1) not null primary key,
    EmployeeId int not null,
    StreetAddress varchar(255),
    City varchar(55),
    StateId int not null,
    ZipCode varchar(10),
    CONSTRAINT fk_Employee_Id_Address foreign key (EmployeeId) REFERENCES [Employees](Id),
    CONSTRAINT fk_State_Id foreign key (StateId) REFERENCES [States](Id)
)
GO

Сгенерированный сотрудник из базы данных EF6

CREATE TABLE [States] (
    Id int identity (1, 1) not null primary key,
    Name varchar(50) not null,
    Abbreviation varchar(2) not null
)
GO

CREATE TABLE Departments (
    Id int identity (1, 1) not null primary key,
    Name varchar(50),
)
GO

CREATE TABLE [Role] (
    Id int identity (1, 1) not null primary key,
    Name varchar(50)
)
GO

CREATE TABLE Employees (
    Id int identity (1, 1) not null primary key,
    FirstName varchar(50),
    LastName varchar(50),
    Email varchar(255),
    DepartmentId int constraint fk_Department_Id foreign key references Departments(Id)
)

GO

CREATE TABLE AssignedRoles (
    Id int identity (1, 1) not null primary key,
    EmployeeId int not null constraint fk_Employee_Id foreign key references Employees(Id),
    RoleId int not null constraint fk_Role_Id foreign key references [Role](Id),
)
GO

CREATE TABLE [Addresses] (
    Id int identity (1, 1) not null primary key,
    EmployeeId int not null,
    StreetAddress varchar(255),
    City varchar(55),
    StateId int not null,
    ZipCode varchar(10),
    CONSTRAINT fk_Employee_Id_Address foreign key (EmployeeId) REFERENCES [Employees](Id),
    CONSTRAINT fk_State_Id foreign key (StateId) REFERENCES [States](Id)
)
GO

Сгенерированный код для роли

CREATE TABLE [States] (
    Id int identity (1, 1) not null primary key,
    Name varchar(50) not null,
    Abbreviation varchar(2) not null
)
GO

CREATE TABLE Departments (
    Id int identity (1, 1) not null primary key,
    Name varchar(50),
)
GO

CREATE TABLE [Role] (
    Id int identity (1, 1) not null primary key,
    Name varchar(50)
)
GO

CREATE TABLE Employees (
    Id int identity (1, 1) not null primary key,
    FirstName varchar(50),
    LastName varchar(50),
    Email varchar(255),
    DepartmentId int constraint fk_Department_Id foreign key references Departments(Id)
)

GO

CREATE TABLE AssignedRoles (
    Id int identity (1, 1) not null primary key,
    EmployeeId int not null constraint fk_Employee_Id foreign key references Employees(Id),
    RoleId int not null constraint fk_Role_Id foreign key references [Role](Id),
)
GO

CREATE TABLE [Addresses] (
    Id int identity (1, 1) not null primary key,
    EmployeeId int not null,
    StreetAddress varchar(255),
    City varchar(55),
    StateId int not null,
    ZipCode varchar(10),
    CONSTRAINT fk_Employee_Id_Address foreign key (EmployeeId) REFERENCES [Employees](Id),
    CONSTRAINT fk_State_Id foreign key (StateId) REFERENCES [States](Id)
)
GO

Виновный тест, который терпит неудачу

CREATE TABLE [States] (
    Id int identity (1, 1) not null primary key,
    Name varchar(50) not null,
    Abbreviation varchar(2) not null
)
GO

CREATE TABLE Departments (
    Id int identity (1, 1) not null primary key,
    Name varchar(50),
)
GO

CREATE TABLE [Role] (
    Id int identity (1, 1) not null primary key,
    Name varchar(50)
)
GO

CREATE TABLE Employees (
    Id int identity (1, 1) not null primary key,
    FirstName varchar(50),
    LastName varchar(50),
    Email varchar(255),
    DepartmentId int constraint fk_Department_Id foreign key references Departments(Id)
)

GO

CREATE TABLE AssignedRoles (
    Id int identity (1, 1) not null primary key,
    EmployeeId int not null constraint fk_Employee_Id foreign key references Employees(Id),
    RoleId int not null constraint fk_Role_Id foreign key references [Role](Id),
)
GO

CREATE TABLE [Addresses] (
    Id int identity (1, 1) not null primary key,
    EmployeeId int not null,
    StreetAddress varchar(255),
    City varchar(55),
    StateId int not null,
    ZipCode varchar(10),
    CONSTRAINT fk_Employee_Id_Address foreign key (EmployeeId) REFERENCES [Employees](Id),
    CONSTRAINT fk_State_Id foreign key (StateId) REFERENCES [States](Id)
)
GO

Тест говорит результат. Roles.Count () равен 0.

Моя проблема пытается добавить в таблицу соединений AssignedRoles. Я пробовал несколько вставок внутри foreach внутри блока роли, но все равно не повезло. Я искал в этом сайте, но до сих пор не повезло. Я работаю с Micro ORM, поэтому магия таблицы соединений дует мне в голову. Любая помощь будет принята с благодарностью. У меня есть больше кода, если нужно, просто дайте мне знать, какой код неясно.

Когда я отлаживаю внутри цикла foreach его не добавляя в таблицу соединений. ПОМОГИТЕ

Принятый ответ

EDIT :

У вас отсутствует таблица AssignedRoles . Я добавил .edmx в свой проект, и у меня есть этот объект AssignedRole . Попробуйте воссоздать свой edmx.

Старый ответ (первый код):

Я просто попытался использовать вашу структуру базы данных, и все работает нормально.

EmployeeDbdb = new EmployeeDb();

  var empl = new Employee
        {
            FirstName = "Test",
            LastName = "demo",
            Email = "aa@aaa.com"
        };

        var role = new Role
        {
            Name = "Role1"
        };

        db.Roles.AddOrUpdate(role);

        db.Employees.AddOrUpdate(empl);
        db.SaveChanges();


        db.AssignedRoles.AddOrUpdate(new AssignedRole
        {
            EmployeeId = empl.Id,
            RoleId = role.Id
        });

        db.SaveChanges();

ИЛИ:

EmployeeDbdb = new EmployeeDb();

  var empl = new Employee
        {
            FirstName = "Test",
            LastName = "demo",
            Email = "aa@aaa.com"
        };

        var role = new Role
        {
            Name = "Role1"
        };

        db.Roles.AddOrUpdate(role);

        db.Employees.AddOrUpdate(empl);
        db.SaveChanges();


        db.AssignedRoles.AddOrUpdate(new AssignedRole
        {
            EmployeeId = empl.Id,
            RoleId = role.Id
        });

        db.SaveChanges();



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему