Maideen Abdul Kader Ответов: 1

Как решить, что тип "system.int32" для типа "system.string" недопустим в MVC api ?


Привет
У меня система ошибку'.Типа int32' к 'системе.Тип String' не является допустимым в советы в MVC, API-интерфейс PLS я
Спасибо
Мейден

Ниже моего кода

Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace advEditorials.Models
{
    public class MoDetails
    {
        public int Id { get; set; }
        public string DocNo { get; set; }
        public DateTime PubDate { get; set; }
        public string MainSection { get; set; }
        public string SubSection { get; set; }
        public string Position { get; set; }
        public string Color { get; set; }
        public decimal SizeH { get; set; }
        public decimal SizeW { get; set; }
        public decimal Volume { get; set; }
        public decimal PageNumber { get; set; }
        public string Materials { get; set; }
        public string Remarks { get; set; }
        public string Status { get; set; }

    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;

namespace advEditorials.Models
{
    public interface IMORepository
    {
        Task Add(MoDetails mo);
        Task Update(MoDetails mo);
        Task Delete(string id);
        Task<MoDetails> Getmo(string id);
        Task<IEnumerable<MoDetails>> GetmoALL();
    }
}


using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Threading.Tasks;
using System.Web;

namespace advEditorials.Models
{
    public class MORepository :IMORepository
    {
        private readonly SqlDbContext db = new SqlDbContext();

// Retrive All
        public async Task<IEnumerable<MoDetails>> GetmoALL()
        {
            try
            {
                var mo = await db.tbl_Editorial.ToListAsync();
                return mo.AsQueryable();
            }
            catch
            {
                throw;
            }
        }

 // by ID
        public async Task<MoDetails> Getmo(string id)
        {
            try
            {
                MoDetails mo = await db.tbl_Editorial.FindAsync(id);
                if (mo == null)
                {
                    return null;
                }
                return mo;
            }
            catch
            {
                throw;
            }
        }
 //Add
        public async Task Add(MoDetails mo)
        {
            mo.Id = Guid.NewGuid().ToString();
            
            db.tbl_Editorial.Add(mo);
            try
            {
                await db.SaveChangesAsync();
            }
            catch
            {
                throw;
            }
        }

        //Update
        public async Task Update(MoDetails mo)
        {
            try
            {
                db.Entry(mo).State = EntityState.Modified;
                await db.SaveChangesAsync();
            }
            catch
            {
                throw;
            }
        }
//Delete
        public async Task Delete(string id)
        {
            try
            {
                MoDetails mo = await db.tbl_Editorial.FindAsync(id);
                db.tbl_Editorial.Remove(mo);
                await db.SaveChangesAsync();
            }
            catch
            {
                throw;
            }
        }

        private bool MOExists(string id)
        {
            return db.tbl_Editorial.Count(e => e.Id == id) > 0;
        }
    }
} 


Контроллер

using advEditorials.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http;

namespace advEditorials.Controllers
{
    public class EditorialController : ApiController
    {
        private readonly IMORepository _iMORepository = new MORepository();

        [HttpGet]
        //[Route("api/Editorial/Get")]
        public async Task<IEnumerable<MoDetails>> Get()
        {
            return await _iMORepository.GetmoALL();
        }

        [HttpPost]
        [Route("api/Editorial/Create")]
        public async Task CreateAsync([FromBody]MoDetails mo)
        {
            if (ModelState.IsValid)
            {
                await _iMORepository.Add(mo);
            }
        }

        [HttpGet]
        [Route("api/Editorial/Details/{id}")]
        public async Task<MoDetails> Details(string id)
        {
            var result = await _iMORepository.Getmo(id);
            return result;
        }

        [HttpPut]
        [Route("api/Editorial/Edit")]
        public async Task EditAsync([FromBody]MoDetails mo)
        {
            if (ModelState.IsValid)
            {
                await _iMORepository.Update(mo);
            }
        }

        [HttpDelete]
        [Route("api/Editorial/Delete/{id}")]
        public async Task DeleteConfirmedAsync(string id)
        {
            await _iMORepository.Delete(id);
        }


    }
}

DB Table


CREATE TABLE [dbo].[tbl_Editorial](
	[id] [nvarchar](20) NOT NULL,
	[DocNo] [varchar](20) NULL,
	[pubdate] [date] NULL,
	[MainSection] [varchar](50) NULL,
	[SubSection] [varchar](50) NULL,
	[Position] [varchar](50) NULL,
	[Color] [varchar](20) NULL,
	[SizeH] [float] NULL,
	[SizeW] [float] NULL,
	[Volume] [float] NULL,
	[PageNumber] [float] NULL,
	[Materials] [varchar](100) NULL,
	[Remarks] [varchar](100) NULL,
	[Status] [varchar](20) NULL,
	[Category] [varchar](50) NULL
) ON [PRIMARY]
GO

F-ES Sitecore

Вероятно, было бы полезно, если бы вы сказали, какая именно строка из 100 строк кода, которые вы вставили, вызывает ошибку.

Richard Deeming

Если вы хотите, чтобы кто-то помог вам исправить исключение, вам нужно опубликовать полное и точное сообщение об ошибке и указать, из какой строки кода оно было выброшено.

Не пытайтесь перефразировать или обобщить сообщение об ошибке, потому что в конечном итоге вы потеряете важную информацию из него.

Введите 'System.Int32' в поле 'System.Тип String' недопустим это не полное сообщение об ошибке.

Maideen Abdul Kader

Привет
Спасибо за быстрый ответ

Ошибка в модуле MORepository

Оператор '==' не может быть применен к операндам типа 'int' и 'string'

private bool MOExists(string id)
{
верните db.tbl_Editorial.Граф(е =&ГТ; электронная.Код == код) и gt; 0; (эта линия)

}

Это происходит при отладке.

Пожалуйста, посоветуйте мне
Спасибо
Мейден

1 Ответов

Рейтинг:
6

jimmson

Собственность Айди В вашем MoDetails класс - это тип integer, в то время как ваш столбец базы данных [идентификатор] это тип varchar, который является string.
Вам нужно сохранить оба типа одинаковыми.


Afzaal Ahmad Zeeshan

5ед.

jimmson

Спасибо, приятель!

Maideen Abdul Kader

Спасибо всем

Ниже я упомянул строку, но в таблице это int. Поэтому я перешел на int, работая нормально

Предыдущий код

private bool MOExists(string id)
{
верните db.tbl_Editorial.Граф(е =&ГТ; электронная.Код == код) и gt; 0; (эта линия)

}

Текущий код

private bool MOExists(int id)
{
верните db.tbl_Editorial.Граф(е =&ГТ; электронная.Код == код) и gt; 0; (эта линия)

}

Спасибо вам всем, что дали мне совет

Мейден