读取实体框架时出错

本文关键字:出错 框架 实体 读取 | 更新日期: 2023-09-27 18:05:40

我有一个问题,从一个表读取数据与实体框架。

我要做的是读取Id表中的一行。

这是我的SQL表定义:
CREATE TABLE [dbo].[Wares] (
    [Ware_ID]       INT           IDENTITY (1, 1) NOT NULL,
    [WareType_ID]   INT           NOT NULL,
    [Model_ID] INT           NOT NULL,
    [Ware_Price]    FLOAT (53)    CONSTRAINT [DF_Wares_Ware_Price] DEFAULT ((0)) NOT NULL,
    [Ware_Count]    INT           CONSTRAINT [DF_Wares_Ware_Count] DEFAULT ((0)) NOT NULL,
    [Ware_Brand]    NVARCHAR (30) CONSTRAINT [DF_Wares_Ware_Brand] DEFAULT (N'') NOT NULL,
    [Ware_Image]    VARCHAR (200) NULL,
    CONSTRAINT [PK_Wares] PRIMARY KEY CLUSTERED ([Ware_ID] ASC),
    CONSTRAINT [FK_Wares_WareTypes] FOREIGN KEY ([WareType_ID]) REFERENCES [dbo].[WareTypes] ([WareType_ID]) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT [FK_Wares_Models] FOREIGN KEY ([PhoneModel_ID]) REFERENCES [dbo].[Models] ([Model_ID]) ON DELETE CASCADE ON UPDATE CASCADE
);

这是我的类定义:

public class Ware
{
    [Key]
    public int Ware_ID { get; set; }
    public int WareType_ID { get; set; }
    public int PhoneModel_ID { get; set; }
    public float Ware_Price { get; set; }
    public int Ware_Count { get; set; }
    public string Ware_Brand { get; set; }
    public string Ware_Image { get; set; }
    public virtual WareType WareType { get; set; }
}

我想从查询字符串中读取Id并使用它来选择行:

private Ware ThisWare()
{
    string strid = Request.QueryString["id"];
    int id = Convert.ToInt32(strid);
     var context = EFDBContext.ReturnNewContext();
     var query = from m in context.Wares where m.Ware_ID == id select m;
     if (query.Count() == 1)
         return query.First();
     else return null;
}

我得到的错误从行:return query.First();

错误描述:

An exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll but was not handled in user code

Additional information: The 'Ware_Price' property on 'Ware' could not be set to a 'System.Double' value. You must set this property to a non-null value of type 'System.Single'.

有人知道我怎么能解决这个问题吗?

注::我已经尝试将Ware_Price更改为System.Single类型,但它仍然不起作用。

读取实体框架时出错

SQL端的float(53)是8个字节。c#端的float(又名Single)是4个字节。SQL Server和。net之间的数据类型不匹配。

'Ware'上的'Ware_Price'属性无法设置为'System '。两倍的价值。

表示实体框架从表中收到一个System.Double (double)。

您必须将此属性设置为'System.Single'类型的非空值。

这意味着你的属性只能接受System.Single (float)类型的值。实体框架识别了差异,并做出了InvalidOperationException的反应。

要修复它,您需要将Ware类中的Ware_Price数据类型改为double

我进一步建议,对于货币值,decimal将是正确的数据类型,无论是在SQL中还是在。net中,特别是,如果您打算用它进行任何数学运算(例如,对大量价格求和)。