首页 > 解决方案 > LINQ to Entities 不支持指定的类型成员“用户名”

问题描述

我正在尝试使用 url 中的 id 参数显示来自特定用户的图像,但我收到以下错误消息:

LINQ to Entities 不支持指定的类型成员“用户名”。仅支持初始化程序、实体成员和实体导航属性。

这是我的操作方法:

[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);
    }
}

我已经阅读了有关此错误的更多信息,并且据我所知人们得到了这个,因为该变量不是数据库中的列,但我的表 Image 中有一个 UserName 字段。

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; }
}

标签: c#asp.net-mvcentity-frameworklinq

解决方案


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" />

注意:每次在数据库中添加或更新列和/或表模式时,都应该更新模型以将数据库中的所有更改反映到数据模型类中。


推荐阅读