我正在使用EF 6.0开发.NET项目。
**请注意,数据库已存在且无法通过代码**
进行更改我正在使用枚举,这是我的代码:
[Table("T_PRODUCTS")]
public class basket
{
[Key]
public int productID{get;set;}
public string productName {get;set;}
public EProductType productType {get;set;}
}
public enum EProductType
{
typeA = 0,
typeB = 1,
}
我在SQL Server中定义表:
CREATE TABLE [dbo].[T_PRODUCTS](
[productID] [int] NOT NULL,
[productName] [varchar](100) NULL,
[productType] [smallint] NULL,
CONSTRAINT [PK_T_PRODUCTS] PRIMARY KEY CLUSTERED
(
[productID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
运行单元测试时,数据会成功保存在数据库中! ;)
然而,当我使用我的网络API时:
public class ProductController : ApiController
{
public HttpResponseMessage Get( int id )
{
var Product= Products.GetById( id );
if ( Product == null )
{
return Request.CreateResponse( HttpStatusCode.NotFound );
}
return Request.CreateResponse( HttpStatusCode.OK, Product );
}
}
我有以下错误消息:
<Error><Message>An error as occured.</Message><ExceptionMessage>Property 'productType' on 'Product' could not be set to 'System.Int16'. You must assign a non null value of type 'EProductType' to this property. </ExceptionMessage>
<ExceptionType>System.InvalidOperationException</ExceptionType>
如果我改变我的枚举:
public enum EProductType : ushort
{
typeA = 0,
typeB = 1,
}
它会毫无错误地返回我的产品。
但是,字段'productType'始终设置为0(零)。 然后,所有使用EF保存的新产品在“productType”字段中都为NULL ...
如何在EF和Web API中使用枚举?
感谢您的回复。
答案 0 :(得分:4)
这是一种简单的类型不匹配,一般没有错。
您的[productType]
列的类型为smallint
(16位)。因此,您必须在C#中使用16位整数(short
或ushort
)。
默认情况下,未在C#中显式派生自整数类型的枚举类型为int
(32位)。