Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 指定的类型成员';用户名';在LINQ to实体中不支持_C#_Asp.net Mvc_Entity Framework_Linq - Fatal编程技术网

C# 指定的类型成员';用户名';在LINQ to实体中不支持

C# 指定的类型成员';用户名';在LINQ to实体中不支持,c#,asp.net-mvc,entity-framework,linq,C#,Asp.net Mvc,Entity Framework,Linq,我试图使用url中的id参数显示特定用户的图像,但收到以下错误消息: LINQ to中不支持指定的类型成员“UserName” 实体。仅初始值设定项、实体成员和实体导航 支持属性 这是我的行动方法: [HttpGet] public ActionResult Show(String id) { var images = new List<Image>(); var db = new portfolio_project_db(); if (String.IsN

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

LINQ to中不支持指定的类型成员“UserName” 实体。仅初始值设定项、实体成员和实体导航 支持属性

这是我的行动方法:

[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);
    }
}
[HttpGet]
公共操作结果显示(字符串id)
{
var images=新列表();
var db=新投资组合_项目_db();
if(String.IsNullOrEmpty(id))
{
返回重定向到操作(“索引”、“主页”);
}
其他的
{
images=db.images.Where(x=>x.UserName==id.ToList();
返回视图(图像);
}
}
我已经阅读了关于这个错误的更多信息,据我所知,人们会得到这个错误,因为变量不是数据库中的一列,但我的表映像中确实有一个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)
);
公共部分类映像
{
公共int-ImageID{get;set;}
公共字符串标题{get;set;}
公共字符串ImagePath{get;set;}
公共可为空的用户标识{get;set;}
公共字符串用户名{get;set;}
}
创建表[dbo]。[Image](
[ImageID]整数标识(1,1)不为空,
[标题]VARCHAR(50)空,
[ImagePath]NVARCHAR(最大值)为空,
[UserID]INT NULL,
[用户名]NVARCHAR(20)不为空,
主键群集([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; }
}
public部分类公文包\u项目\u db:DbContext
{
公共投资组合项目数据库()
:base(“name=portfolio\u project\u db”)
{
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
抛出新代码FirstException();
}
公共虚拟数据库集映像{get;set;}
}
LINQ to Entities消息中不支持指定的类型成员“UserName”,这表明属性
UserName
仍未映射到数据库中的
UserName
列。以下是在数据库优先配置中启用属性映射的步骤(因为
OnModelCreating()
方法中存在
onnoticecodefirstexception()
):

a。使用EDMX designer(推荐)

1) 从数据模型类中删除现有的
UserName
属性

2) 在实体设计器中打开模型的EDMX文件,然后在设计器曲面的任何空白区域中单击鼠标右键,然后选择“从数据库更新模型”选项

3) 在EDMX designer中保存所有更改,现在将自动启用
UserName
属性 使用数据库中的
UserName
列创建并映射

b。编辑EDMX文件以创建映射(高级-不推荐)

此方法需要编辑EDMX文件,通过在
部分中添加属性名称手动添加映射属性:



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

错误非常明显:
UserName
不是表定义架构的一部分。@TetsuyaYamamoto:请检查,如果你还没有:谢谢!存在
意外CodeFirstException()
意味着您是先使用数据库还是先使用模型,是否可以确保属性已映射到EDMX文件中?通常
DbSet
被声明为
publicdbset-Images{get;set;}
,没有
virtual
关键字。@Sandra您的方法是先使用数据库。您已经有了.edmx文件,因此每次更新数据库时,只需打开.edmx>右键单击,然后
updatemodelfromdatabase
。您不应该生成模型manually@Sandra每次在数据库中添加新列时,都需要通过EDMX设计器中的
updatemodelfromdatabase
选项重新生成数据模型类。它会自动生成属性名称及其映射类型。如果不使用该选项,则需要在text/XML编辑器中编辑EDMX文件,并创建自己的属性映射(不建议这样做)。