#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.