我正在将Web API 2与实体框架结合使用。我想用控制器方法检索多个实体。我从请求标头中提取参数。然后我将它转换为包含名称和值的二维数组。然后我想从db中获取所有匹配的实体。我已经使用SqlQuery()
方法结合参数数组尝试了它,但这也不起作用。
我收到错误:
System.Data.Entity.Core.EntityCommandExecutionException`
datareader与给定值不兼容。类型的元素('ADRESSE1')在同名的数据读取器中没有对应的列。
这是我的模特:
public partial class ADRESSE
{
public int id { get; set; }
public string ADRESSE1 { get; set; }
public string PERSONAL { get; set; }
public string LIEFERADR { get; set; }
public string RECHNUNGADR { get; set; }
public string FIRMA { get; set; }
public string FIRMA1 { get; set; }
...
}
这是数据库中的表。 (由于项目客户端我无法更改db中的任何命名)
CREATE TABLE [dbo].[ADRESSE]
(
[id] [int] NOT NULL,
[ADRESSE] [nvarchar](15) NOT NULL,
[PERSONAL] [nvarchar](31) NULL,
[LIEFERADR] [nvarchar](15) NULL,
[RECHNUNGADR] [nvarchar](15) NULL,
[FIRMA] [nvarchar](15) NULL,
[FIRMA1] [nvarchar](63) NULL,
...
)
我的查询:
[HttpGet]
[AcceptVerbs("GET", "HEAD")]
public IQueryable<ADRESSE> GetADRESSE()
{
var header = HeaderExtractionProvider.GetRequestHeaders(Request.Headers);
if (header.Count > 0)
{
var paramArray = new List<SqlParameter>();
foreach (var param in header)
{
paramArray.Add(new SqlParameter(param[0], param[1]));
}
var test = db.ADRESSE.SqlQuery("Select * from ADRESSE", paramArray.ToArray());
//return all found adresses here.
}
return db.ADRESSE;
}
答案 0 :(得分:1)
您获取的数据库错误是因为您的媒体资源名称ADRESSE1
与ADRESSE
的数据库列不同。它不知道如何映射它。
您可以使用System.ComponentModel.DataAnnotations.Schema
中的ColumnAttribute
修复Entity Framework的问题。
public partial class ADRESSE
{
public int id { get; set; }
[Column("ADRESSE")]
public string ADRESSE1 { get; set; }
public string PERSONAL { get; set; }
public string LIEFERADR { get; set; }
public string RECHNUNGADR { get; set; }
public string FIRMA { get; set; }
public string FIRMA1 { get; set; }
...
}
然后您可以创建这样的LINQ查询:
var addresses = db.Addresses.Where(ad => paramArray.Contains(ad.Id));
答案 1 :(得分:0)
使用Linq
var addressed = db.Addresses.Where(ad => paramArray.Contains(ad.Id));