ASP.NET / Entity Framework - Тип сущности PartenaireResult не является частью модели для текущего контекста - PullRequest
0 голосов
/ 11 октября 2018

Я новичок в ASP.NET и не могу найти ни решения, ни связанной с ним проблемы.

Я хочу обновить пользователя в базе данных с помощью уникального идентификатора сигнала через метод действиякоторый получает текущего подключенного пользователя.

Я использую базу данных первый подход.

При запуске запроса я получаю следующую ошибку:

System.InvalidOperationException:Тип сущности PartenaireResult не является частью модели для текущего контекста.

Дело в том, что PartenaireResult - это не сущность в моей таблице, а только класс для возврата данных.

Я попытался это решение безуспешно (только добавив еще одну строку подключения с именем "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; }
    }
}

Буду признателен за любую подсказку.

Спасибо всем, кто найдет время, чтобы прочитать / ответить на этот пост.

1 Ответ

0 голосов
/ 11 октября 2018

Основной причиной этой проблемы является то, что DbContext (экземпляр «UphairDbEntities») не имеет тип «PartenaireResult».

  1. Сначала я бы разархивировал файл .edmx в вашем проекте, нашел бы файл ".... tt" и раскрыл его.Вы должны увидеть файл "..cs" для каждой таблицы, включенной в файл edmx.
  2. Убедитесь, что там есть файл "PartenaireResult.cs"

Еслифайла нет, происходит одно из двух:

  1. У вас есть второй файл .edmx (может быть, вы удалили его перед созданием), в котором уже есть файл "PartenaireResult.cs".Удалите этот файл (если он существует), откройте и повторно сохраните файл .edmx, чтобы заново создать файл «PartenaireResult.cs» как часть вашего проекта.
  2. Ваш PartenaireResult.cs не является частью.edmx, поэтому у вашего контекста UphairDbEntities нет типа PartenaireResult.

Эта проблема часто может возникать, когда вы используете несколько контекстов, которые совместно используют таблицу.Если Entities1 () и Entities2 () ссылаются на одну и ту же таблицу «Table1», то таблица будет иметь только один из этих контекстов.Одним из способов решения этой проблемы является переименование сопоставленного имени таблицы в один .edmx;Второй обходной путь - хранить таблицу только в одном контексте.

...