Linq to sql linq到sql在我的邮政编码字段上创建十进制类型,应该是int(我猜)

Linq to sql linq到sql在我的邮政编码字段上创建十进制类型,应该是int(我猜),linq-to-sql,Linq To Sql,在sql server数据库中,我有一个类型为“numeric”的字段。数据库中的精度设置为18 当我创建linq to sql类时,它显示为: [Column(Storage="_zip", DbType="Decimal(18,0)")] public System.Nullable<decimal> zip { [Column(Storage=“\u-zip”,DbType=“Decimal(18,0)”)] 公共系统.可为空的zip { 问题是:

在sql server数据库中,我有一个类型为“numeric”的字段。数据库中的精度设置为18

当我创建linq to sql类时,它显示为:

    [Column(Storage="_zip", DbType="Decimal(18,0)")]
    public System.Nullable<decimal> zip
    {
[Column(Storage=“\u-zip”,DbType=“Decimal(18,0)”)]
公共系统.可为空的zip
{
问题是:

  • 你知道为什么它会选择我的it十进制。这显然不是我想要的存储和查看邮政编码的方式
  • 在我的sql server数据库中存储邮政编码的最佳格式是什么

  • 有什么建议吗?

    这正是应该的。“数字”和“十进制”是相同的*在SQL Server中-SQL-92标准规定它们在功能上应该相同(这是因为在SQL-92之前,不同的供应商对同一事物使用不同的名称。支持所有名称保留向后兼容性).NET只有一个十进制类型(因为它不是SQL,所以不需要支持数字别名,尽管您可以创建一个)

    至于邮政编码,数字(18,0)听起来不是很好。对于常规的5位邮政编码来说,它太大,CPU占用太多(数字/十进制以10为基数存储,需要更多的处理能力),而且它不能正确地存储较长的带破折号的邮政编码+4


    由于邮政编码只是碰巧是数字的地址(目前大多数情况下),我建议您使用varchar(10)字段,该字段将正确存储所有邮政编码,包括ZIP+4(5位邮政编码加上破折号加上4位分机码)。

    如果我将该字段更改为varchar(10),我在SQL server enterprise manager中收到一个错误,表示必须删除并重新创建该表。您对无法重新创建的表进行了更改,或者启用了该选项以防止保存需要重新创建表的更改