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

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

我正在使用数据库优先方法。

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


  System.InvalidOperationException:实体类型PartenaireResult不属于当前上下文模型。


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

我没有运气尝试了this solution(仅添加了另一个名为“ DefaultConnection”的连接字符串,但我不理解NinjectWebCommons的概念。

我也试图将此放在我的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; }
    }
}


任何形式的欢迎将不胜感激。

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

最佳答案

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


首先,我将在项目中折叠.edmx文件,然后找到“ .... tt”文件并将其展开。对于edmx文件中包含的每个表,您都应该看到一个“ ..cs”文件。
确保那里有一个“ PartenaireResult.cs”文件


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


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


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

10-07 22:34