Указанный тип члена 'UserName' не поддерживается в LINQ to Entities - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь показать изображения от определенного пользователя с помощью параметра id в URL, но я получаю это сообщение об ошибке:

Указанный тип члена 'UserName' не поддерживается в LINQ для Сущности. Только инициализаторы, элементы сущностей и навигация сущностей свойства поддерживаются.

Это мой метод действия:

[HttpGet]
public ActionResult Show(String id)
{
    var images = new List<Image>();
    var db = new portfolio_project_db();

    if (String.IsNullOrEmpty(id))
    {
        return RedirectToAction("Index", "Home");
    }
    else
    {
        images = db.Images.Where(x => x.UserName == id).ToList();

        return View(images);
    }
}

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

public partial class Image
{
    public int ImageID { get; set; }
    public string Title { get; set; }
    public string ImagePath { get; set; }
    public Nullable<int> UserID { get; set; }
    public string UserName { get; set; }

}

CREATE TABLE [dbo].[Image] (
    [ImageID]   INT            IDENTITY (1, 1) NOT NULL,
    [Title]     VARCHAR (50)   NULL,
    [ImagePath] NVARCHAR (MAX) NULL,
    [UserID]    INT            NULL,
    [UserName] NVARCHAR(20) NOT NULL, 
    PRIMARY KEY CLUSTERED ([ImageID] ASC)
);

Что мне нужно сделать по-другому?


Запрошенный:

    public partial class portfolio_project_db : DbContext
    {
    public portfolio_project_db()
        : base("name=portfolio_project_db")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<Image> Images { get; set; }
}

1 Ответ

0 голосов
/ 09 ноября 2018

Указанный элемент типа 'UserName' не поддерживается в сообщении LINQ to Entities означает, что свойство UserName по-прежнему не сопоставлено со столбцом UserName в базе данных. Вот шаги, чтобы включить сопоставление свойств в конфигурации Database First (потому что UnintentionalCodeFirstException() существует в методе OnModelCreating()):

а. Использование дизайнера EDMX (рекомендуется)

1) Удалить существующее свойство UserName из Image класса модели данных.

2) Откройте файл EDMX вашей модели в конструкторе сущностей, затем щелкните правой кнопкой мыши в любом пустом месте на поверхности конструктора и выберите параметр Update Model from Database.

3) Сохраните все изменения в конструкторе EDMX, теперь свойство UserName автоматически создан и сопоставлен с UserName столбцом в базе данных.

б. Редактировать файл EDMX для создания сопоставления (дополнительно - не рекомендуется)

Этот подход требует редактирования файла EDMX для добавления свойства сопоставления вручную путем добавления имени свойства в разделах <edmx:StorageModels>, <edmx:ConceptualModels> и <edmx:Mappings>:

<!-- for edmx:StorageModels -->
<Property Name="UserName" Type="nvarchar" MaxLength="20" Nullable="false" />

<!-- for edmx:ConceptualModels -->
<Property Name="UserName" Type="String" MaxLength="20" FixedLength="false" Unicode="true" Nullable="false" />

<!-- for edmx:Mappings -->
<ScalarProperty Name="UserName" ColumnName="UserName" />

Примечание: Каждый раз, когда вы добавляете или обновляете столбец (столбцы) и / или схему таблицы в базе данных, вы должны обновлять модель, чтобы отразить все изменения из базы данных в классы модели данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...