Я использовал EF Designer из базы данных для создания моих моделей из базы данных, созданной для моего проекта. Для одного контроллера мне нужно обратиться к нескольким моделям. Примером этого является таблица пользователей, которая содержит пользовательский отдел и офис. Мне нужно указать две отдельные таблицы DepartmentPermissions и OfficePermissions, чтобы определить, какие данные пользователь может видеть.Использование нескольких моделей в одном контроллере
Вот примеры автогенерируемая моделей:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Project.Models
{
using System;
using System.Collections.Generic;
public partial class User
{
public int User_ID { get; set; }
public string User_Username { get; set; }
public string User_Department { get; set; }
public string User_Office { get; set; }
}
}
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Project.Models
{
using System;
using System.Collections.Generic;
public partial class DepartmentPermission
{
public int DeptPerm_ID { get; set; }
public string DeptPerm_Department { get; set; }
public string DeptPerm_Role { get; set; }
}
}
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Project.Models
{
using System;
using System.Collections.Generic;
public partial class OfficePermission
{
public string OffPerm_OfficeID { get; set; }
}
}
Первый столбец в каждой таблице первичный ключ в базе данных.
При создании контроллера с использованием любой из этих автогенерированных моделей все работает нормально, кроме как я могу использовать только одну таблицу.
Я хочу, чтобы иметь возможность проверить отдел и офис пользователя из таблицы Users, а затем проверить роль, связанную с отделом пользователя, из таблицы DepartmentPermissions, а затем проверить, находится ли офис пользователя в таблице OfficePermissions.
Я прочитал, что я могу создать модель представления, чтобы создать новую модель, которая объединяет модели, которые я хочу использовать, чтобы я мог получать информацию из всех соответствующих таблиц в одном контроллере.
Мой пример ViewModel является:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Project.Models
{
public class HomeViewModel
{
public IEnumerable<User> Users { get; set; }
public IEnumerable<OfficePermission> OfficePermissions { get; set; }
public IEnumerable<DepartmentPermission> DepartmentPermissions { get; set; }
}
}
При попытке создать контроллер с этой точки зрения модели, я получаю сообщение об ошибке сказав:
User :: EntityType 'Пользователь' не имеет ключа определен. Определите ключ для этого типа сущности. OfficePermission :: EntityType «OfficePermission» не имеет определенного ключа. Определите ключ для этого типа сущности. DepartmentPermission :: EntityType 'DepartmentPermission' не определил ключ. Определите ключ для этого типа сущности. HomeViewModel :: EntityType «HomeViewModel» не имеет ключа. Определите ключ для этого типа сущности. Пользователи: EntityType: EntitySet «Пользователи» основаны на типе «Пользователь», который не имеет определенных ключей. OfficePermissions: EntityType: EntitySet «OfficePermissions» основан на типе «OfficePermission», который не имеет определенных ключей. DepartmentPermissions: EntityType: EntitySet 'DepartmentPermissions' основан на типе 'DepartmentPermission', который не имеет определенных ключей. HomeViewModels: EntityType: EntitySet «HomeViewModels» основан на типе «HomeViewModel», который не имеет определенных ключей.
Я могу определить ключи вручную в автогенерируемых файлах, однако это будет отменено, когда база данных будет изменена и файлы потребуют автоматической регенерации.
Есть ли способ объединить эти автогенерированные модели, чтобы использовать их вместе в контроллере?
Ma Убедитесь, что ваша модель имеет уникальный ключ, отличающий каждую строку. –
Показать код, который вы пробовали! –