gpt4 book ai didi

c# - 使用 Entity Framework 读取时出错

转载 作者:太空狗 更新时间:2023-10-29 17:45:59 25 4
gpt4 key购买 nike

我在使用 Entity Framework 从表中读取数据时遇到问题。

我想做的是通过 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'.

有人知道我该如何解决这个问题吗?

P.S.:我已经尝试将 Ware_Price 更改为 System.Single 类型,但它仍然无效。

最佳答案

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

The 'Ware_Price' property on 'Ware' could not be set to a 'System.Double' value.

这意味着 Entity Framework 收到了一个 System.Double ( double ) 来自表格。

You must set this property to a non-null value of type 'System.Single'.

这意味着您的属性只能接受 System.Single 类型的值(float)。 Entity Framework 识别出差异并响应 InvalidOperationException .

要修复它,您需要修改 Ware_Price Ware 中的数据类型类最高 double .

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

关于c# - 使用 Entity Framework 读取时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31746122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com