我是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中重命名映射的表名。第二种解决方法是仅将表保留在一个上下文中。