A.M*_*edy 9 c# sql-server entity-framework
我在使用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
);
Run Code Online (Sandbox Code Playgroud)
这是我的班级定义:
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; }
}
Run Code Online (Sandbox Code Playgroud)
我想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;
}
Run Code Online (Sandbox Code Playgroud)
我从行中得到错误: 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'.
有谁知道我怎么解决这个问题?
PS:我已经尝试改变Ware_Price,以System.Single类型,但它仍然没有奏效.
Cᴏʀ*_*ᴏʀʏ 11
float(53)SQL端的A 是8个字节.甲float(又名SingleC#的一侧)为4个字节.SQL Server和.NET之间的数据类型不匹配.
'Ware'上的'Ware_Price'属性无法设置为'System.Double'值.
这意味着实体框架从表中收到了一个System.Double(double).
您必须将此属性设置为"System.Single"类型的非null值.
这意味着您的属性只能接受type System.Single(float)的值.实体框架认识到了这种差异并与之作出了反应InvalidOperationException.
要修复它,您需要将Ware_Price类中的数据类型Ware提升到a double.
我会进一步建议,对于货币价值,decimal在SQL和.NET中都是正确的数据类型,特别是如果你打算用它做任何数学计算(例如,总结大量的价格).
| 归档时间: |
|
| 查看次数: |
5348 次 |
| 最近记录: |