【问题标题】:ASP.NET / Entity Framework - The entity type PartenaireResult is not part of the model for the current contextASP.NET / Entity Framework - 实体类型 PartenaireResult 不是当前上下文模型的一部分
【发布时间】:2019-03-16 23:55:14
【问题描述】:

我是 ASP.NET 新手,无法找到任何解决方案,也找不到与我的问题相关的线索。

我想通过获取当前已连接用户的操作方法,使用 onesignal 唯一标识符更新数据库中的用户。

我使用的是数据库优先方法。

启动请求时出现以下错误:

System.InvalidOperationException:实体类型 PartenaireResult 不是当前上下文模型的一部分。

问题是 PartenaireResult 不是我表上的实体,只是一个用于返回数据的类。

我尝试了this solution,但没有成功(只添加了另一个名为“DefaultConnection”的连接字符串,但我不明白 NinjectWebCommons 的概念。

我还尝试将此 coe 放入我的 DbContext 类中,但没有运气,如 thread 中所述:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<PartenaireResult>().ToTable("PartenaireResult");
}

这是非工作方法:

[Authorize(Roles = "partenaire")]
[Route("api/Partenaires/Me")]
public PartenaireResult GetClientsMe(string onesignal_id)
{
    var connectedUser = GetConnectedUser(User);
    connectedUser.onesignal_id = onesignal_id;

    db.Entry(connectedUser).State = System.Data.Entity.EntityState.Modified;
    db.SaveChanges();

    return connectedUser;
}

[Authorize(Roles = "partenaire")]
public static PartenaireResult GetConnectedUser(IPrincipal user)
{
    var claimIdentity = user.Identity as ClaimsIdentity;
    var claim = claimIdentity?.Claims?.FirstOrDefault(x => x.Type.Equals("IdClient", StringComparison.InvariantCultureIgnoreCase));

    if (claim != null)
    {
        int idPartenaire;

        if (int.TryParse(claim.Value, out idPartenaire))
        {
            using (var db = new UphairDbEntities())
            {
                var me = db.Partenaires.Find(idPartenaire);

                PartenaireResult PartenaireRes = new PartenaireResult();
                ObjectConverterHelper.CopyProperties(me, PartenaireRes);

                return PartenaireRes;
            }
        }
    }

    return null;
}

这是我的PartenaireResult 课程:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.AccessControl;
using System.Web;
using Uphair.EfModel;

namespace Uphair.Api.Models.Partenaire
{
    public class PartenaireResult
    {
        public PartenaireResult()
        {
        }

        public int IdPartenaire { get; set; }
        public string NomComplet { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public string Password { get; set; }
        public string PasswordSalt { get; set; }
        public PartenaireType Type { get; set; }
        public string Pays { get; set; }
        public string Ville { get; set; }
        public string CodePostale { get; set; }
        public string Adresse { get; set; }
        public Nullable<double> Lat { get; set; }
        public Nullable<double> Lng { get; set; }
        public string ImageUrl { get; set; }
        public string CouvertureUrl { get; set; }
        public string TelMobile { get; set; }
        public Nullable<System.DateTime> DateNaissance { get; set; }
        public bool ADomicile { get; set; }
        public int SeDeplace { get; set; }

        public string IdWallet { get; set; }
        public string IdUserMango { get; set; }
        public Nullable<System.DateTime> DateAjout { get; set; }

        public string onesignal_id { get; set; }

        public List<NoteItem> Notes { get; set; }

        /**/
        public double NoteGlobale { get; set; }

        public bool Son { get; set; }
        public bool Push { get; set; }
        public string IdPhone { get; set; }
    }

    public class NoteItem
    {
        public int? IdClient { get; set; }
        public string Commentaire { get; set; }
        public string ImageUrl { get; set; }
        public double Note { get; set; }
        public DateTime? DateAjout { get; set; }

        public int Valide { get; set; }
    }
}

我们将不胜感激。

感谢任何愿意花时间阅读/回答这篇文章的人。

【问题讨论】:

  • 异常出现在哪一行? ObjectConverterHelper.CopyProperties(me, PartenaireRes); 是什么?是否从me 映射属性到PartenaireRes
  • 是的,它正在这样做。这是唯一使用PartenaireResult 实例的行。所以异常一定来自这一行。
  • 如果您手动映射属性,是否有效?在你的情况下,我会使用 AutoMapper。
  • partenaireresult 是否引用了 .edmx 中定义的任何类型?
  • @Cygnus 是的,我的PartenaireResult 中有一个PartenaireType,它在我的.edmx 文件中。

标签: c# asp.net entity-framework asp.net-mvc-4 entity-framework-6


【解决方案1】:

此问题的根本原因是 DbContext(“UphairDbEntities”实例)没有“PartenaireResult”类型。

  1. 首先,我将取消折叠项目中的 .edmx 文件并找到“....tt”文件并展开它。您应该会看到包含在 edmx 文件中的每个表的“..cs”文件。
  2. 确保那里有一个“PartenaireResult.cs”文件

如果文件不存在,则发生以下两种情况之一:

  1. 您有第二个 .edmx 文件(可能在创建此文件之前已删除),其中已有一个“PartenaireResult.cs”文件。删除该文件(如果存在),打开并重新保存您的 .edmx 文件,以重新生成“PartenaireResult.cs”文件作为项目的一部分。
  2. 您的 PartenaireResult.cs 不是 .edmx 的一部分,因此您的 UphairDbEntities 上下文没有 PartenaireResult 类型。

当您使用共享一个表的多个上下文时,经常会发生此问题。如果 Entities1() 和 Entities2() 都引用同一个表“Table1”,那么只有这些上下文中的一个会拥有该表。此问题的一种解决方法是在一个 .edmx 中重命名映射的表名;第二种解决方法是仅将表格保留在一个上下文中。

【讨论】:

  • 我认为你是对的。明天告诉你。感谢您的关注!
  • 感谢您详细解释的答案。但是,我不知道如何使用您的信息解决我的问题。 PartenaireResult 类仅用于返回目的,它不是实体,也不在我的 edmx 中。从来没有。我不明白你答案的最后一部分,以及你向我提出的解决方案。
猜你喜欢
  • 2016-08-31
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-10
  • 2014-11-30
  • 2017-06-19
  • 2011-06-26
  • 2014-01-08
相关资源
最近更新 更多