Несовместимый тип считывателя данных при использовании Entity Framework для нескольких таблиц

#c# #entity-framework

#c# #entity-framework

Вопрос:

В моей модели я получаю следующую ошибку:

Считыватель данных несовместим с указанным ‘RMA.DAL.RMA’. Член типа ‘Notes’ не имеет соответствующего столбца в считывателе данных с тем же именем.

Я использую Model-View-Controller 3. Файлы кода приведены ниже:

RMAModel.cs

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using RMA.DAL;
using System.Collections;

namespace RMA.Models
{
    public class RMAs
    {
        [Key]
        public int RMANumber { get; set; }
        public int OrderNumber { get; set; }
        public string Status { get; set; }
        public int CartID { get; set; }
        public DateTime DateIssued { get; set; }
        public DateTime OrderDate { get; set; }
        public string Name { get; set; }
        public string SKU { get; set; }
        public int QuantityAuthorized { get; set; }
        //to allow Nullable
        public int? SourceOrderNumber { get; set; }

        //For Notes
        public string Notes { get; set; }

        private DBContext_Model db = new DBContext_Model();

        public IEnumerable all()
        {
            string query = @"  SELECT DISTINCT r.RMAnumber,r.OrderNumber,r.Status,O.CartID,r.DateIssued,O.OrderDate,O.Name,oDetails.SKU,details.QuantityAuthorized,O.SourceOrderNumber,PO.PONumber
                                FROM RMAs r
                                INNER JOIN RMADetails details ON r.RMAnumber = details.RMAnumber
                                INNER  JOIN  Orders O ON O.OrderNumber = R.OrderNumber 
                                INNER  JOIN [Order Details] oDetails on O.OrderNumber = oDetails.OrderNumber
                                INNER JOIN Notes n on n.NumericKey = O.OrderNumber
                                INNER JOIN PurchaseOrders PO ON PO.OrderNumber = O.OrderNumber
                                INNER JOIN PurchaseOrderDetails PODetails ON PODetails.PONumber = PO.PONumber
                            ";
            var items = db.RMAs.SqlQuery(query);
            return items.ToList();
        }

        public IEnumerable single(int RMANumber, int OrderNumber)
        {
            string query = @"  SELECT DISTINCT r.RMAnumber,r.OrderNumber,r.Status,O.CartID,r.DateIssued,O.OrderDate,O.Name,oDetails.SKU,details.QuantityAuthorized,O.SourceOrderNumber,PO.PONumber
                                FROM RMAs r
                                INNER JOIN RMADetails details ON r.RMAnumber = details.RMAnumber
                                INNER  JOIN  Orders O ON O.OrderNumber = R.OrderNumber 
                                INNER  JOIN [Order Details] oDetails on O.OrderNumber = oDetails.OrderNumber
                                INNER JOIN Notes n on n.NumericKey = O.OrderNumber
                                INNER JOIN PurchaseOrders PO ON PO.OrderNumber = O.OrderNumber
                                INNER JOIN PurchaseOrderDetails PODetails ON PODetails.PONumber = PO.PONumber
                                AND O.OrderNumber = "   OrderNumber   " AND r.RMAnumber = "   RMANumber;
            var items = db.RMAs.SqlQuery(query);
            return items.ToList();
        }

        public IEnumerable getNotesByOrder(int OrderNumber)
        {
            string query = "Select * FROM Notes WHERE NumericKey = "   OrderNumber;
            var notes = db.Notes.SqlQuery(query);
            return notes.ToList();
        }
    }
}
  

DAL/DBContextModel.cs

 using System.Data.Entity; 
using RMA.Models;

namespace RMA.DAL
{
    public class DBContext_Model:DbContext
    {
        public DbSet<RMAs> RMAs { get; set; }
        public DbSet<RMADetails> RMADetails { get; set; }
        public DbSet<Note> Notes { get; set; }
    }
}
  

DetailsController.cs

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using RMA.Models;
using System.Collections;

namespace RMA.Controllers
{
    public class DetailsController : Controller
    {
        public ActionResult Index(int id, int orderid)
        {
            RMAs modelRMA = new RMAs();
            IEnumerable singleRMA = modelRMA.single(id,orderid);
            IEnumerable notes = modelRMA.getNotesByOrder(orderid);
            ViewBag.notes = notes;
            return View(singleRMA);
        }

    }
}
  

index.cshtml

 @model IEnumerable<RMA.Models.RMAs>

@{
    ViewBag.Title = "Details Page";
}
<style>
    #overview
    {
        width: 100%;
        height:40%;
    }
    div > table
    {
        width:100%;
    }
    #notes
    {
        margin-top:2%;
    }
    .left
    {
        width:40%;
        margin-top:5%;
        background-color:Blue;
        color:White;
    }
</style>
<h4>Summary</h4>
<div id=overview>
    <table>
        <tr>
            <th>Order #</th>
            <th>RMA #</th>
            <th>RMA Status</th>
            <th>Market Place ID</th>
            <th>RMA Issue Date</th>
            <th>Order Date</th>
            <th>Cust Ship To Name</th>
            <th>Local Sku</th>
            <th>RMA Qty</th>
            <th>Marketplace Order #</th>
        </tr>
         @foreach (RMA.Models.RMAs i in Model)
        {
            //<span>@i.OrderNumber</span>
            <tr>
                <td>@i.OrderNumber</td>
                <td>@i.RMANumber</td>
                <td>@i.Status</td>
                <td>@i.CartID</td>
                <td>@i.DateIssued</td>
                <td>@i.OrderDate</td>
                <td>@i.Name</td>
                <td>@i.SKU</td>
                <td>@i.QuantityAuthorized</td>
                <td>@i.SourceOrderNumber</td>
            </tr>
        }
    </table>
</div>
<h4>Notes</h4>
<div id=notes>
    <table>
        <tr>
            <th>Notes</th>
            <th>Date</th>
            <th>Time</th>

        </tr>
        @foreach (IEnumerable<RMA.Models.RMAs> note in @ViewBag.notes)
        {
        <tr>
            <td>amp;nbsp;</td>
            <td>amp;nbsp;</td>
            <td>amp;nbsp;</td>
        </tr>
        }
    </table>
</div>
<div class=left>
    My Reason Goes here
</div>
<div class=left>
    Shipping Info
</div>
<div class=left>
    Billing Info
</div>
  

Я хочу, чтобы Notes данные таблицы отображались в MyView.

Комментарии:

1. Почему эти строки запроса, почему у вас нет инструкций LINQ?

2. Я новичок в asp.net/mvc3 и я не знаю LINQ

3. Тогда изучение LINQ должно быть для вас prio 1! Потратьте следующие несколько дней только на это. Это даст вам самую высокую рентабельность инвестиций за всю историю. Entity Framework без LINQ подобен автомобилю без бензина.

4. Это не решение. Вы предполагаете, что EF не может работать без LINQ, хотя и может. В любом случае спасибо за ваше время

5. Конечно, это не прямое решение, но вы действительно не должны продолжать в том же духе. Это не что иное, как искренний совет. Причиной ошибки является то, что SELECT список не соответствует свойствам RMA, Notes его нет в нем. Но сделайте себе большое одолжение и попытайтесь исправить это, написав LINQ.