ASP.NET 写数据库错误 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
CBBing
V2EX    .NET

ASP.NET 写数据库错误

  •  
  •   CBBing 2016-05-07 23:24:41 +08:00 3712 次点击
    这是一个创建于 3517 天前的主题,其中的信息可能已经有所发展或是发生改变。

    http://ww4.sinaimg.cn/mw690/e41b183dgw1f3n8k5ykt4j20s70d9q8o.jpg a href="http://ww1.sinaimg.cn/mw690/e41b183dgw1f3n8k6ewk6j20ms0ah0x0.jpg" rel="nofollow">http://ww1.sinaimg.cn/mw690/e41b183dgw1f3n8k6ewk6j20ms0ah0x0.jpg http://ww2.sinaimg.cn/mw690/e41b183dgw1f3n8k82nc6j20fm0593zd.jpg http://ww4.sinaimg.cn/mw690/e41b183dgw1f3n8k85vfhj20e205i405.jpg

    33 条回复    2016-05-09 13:47:48 +08:00
    CBBing
        1
    CBBing  
    OP
       2016-05-07 23:25:58 +08:00
    CBBing
        2
    CBBing  
    OP
       2016-05-07 23:26:11 +08:00
    CBBing
        3
    CBBing  
    OP
       2016-05-07 23:26:18 +08:00
    CBBing
        4
    CBBing  
    OP
       2016-05-07 23:26:27 +08:00
    haitang
        5
    haitang  
       2016-05-08 03:08:47 +08:00 via Android   1
    查看异常的详细信息; id 22 是唯一的?
    z67nnciQnb7r8bLf
        6
    z67nnciQnb7r8bLf  
       2016-05-08 08:50:33 +08:00   1
    看看那个异常的 innerexception
    CBBing
        7
    CBBing  
    OP
       2016-05-08 09:15:44 +08:00
    @haitang 目前数据库只有一条数据
    CBBing
        8
    CBBing  
    OP
       2016-05-08 09:21:28 +08:00
    CBBing
        9
    CBBing  
    OP
       2016-05-08 09:22:46 +08:00
    @C0dEr 显示 ID 为 null ,但那个窗口 Id=22 说明有值啊
    heaton_nobu
        10
    heaton_nobu  
       2016-05-08 09:39:17 +08:00   1
    看看生成的语句是什么
    CBBing
        11
    CBBing  
    OP
       2016-05-08 09:43:51 +08:00
    heaton_nobu
        12
    heaton_nobu  
       2016-05-08 09:50:51 +08:00   1
    你生成的语句里面没有 Id 这列,看看是不是没设主键
    vghdjgh
        13
    vghdjgh  
       2016-05-08 09:52:24 +08:00   1
    如果是 EF 的 Code First ,你可以贴下模型是怎么映射的。
    CBBing
        14
    CBBing  
    OP
       2016-05-08 09:53:59 +08:00
    @heaton_nobu
    @vghdjgh 我设置了主键,但是是手动赋值的,现在改为自增主键,就可以了,请问是什么原因
    heaton_nobu
        15
    heaton_nobu  
       2016-05-08 10:47:38 +08:00 via iPhone   1
    @CBBing 有可能模型与数据库不一致,再同步看看呢
    dong3580
        16
    dong3580  
       2016-05-08 11:10:23 +08:00 via Android   1
    @CBBing
    id 为 null?还设置的主键。
    检查一下传值那部分,是不是哪儿没穿对
    Choyes
        17
    Choyes  
       2016-05-08 11:36:00 +08:00 via Android   1
    已有了一就不能再添加相同的主值,你著把那掉然後再值就可以的,但是不建主固定的值,要么生成,要么自增
    CBBing
        18
    CBBing  
    OP
       2016-05-08 15:17:56 +08:00
    @heaton_nobu 模型与数据库是一致的,现在写数据到数据库已经成功了
    zkd8907
        19
    zkd8907  
       2016-05-08 15:28:22 +08:00   1
    主键不是自增的时候,是需要你在 INSERT 的时候主动赋值的,要不 SQL Server 不知道 ID 是多少。
    CBBing
        20
    CBBing  
    OP
       2016-05-08 15:28:38 +08:00
    @dong3580 可能是因为我之前没有设置主键自动生成,但那时候我数据库就一条数据,主键也不是 22
    CBBing
        21
    CBBing  
    OP
       2016-05-08 15:29:52 +08:00
    @zkd8907 恩,我手动设置主键为 22,但还是一直不行,后来设置了主键自动生成就行了,按理说手动设置主键只要不冲突也可以吧?
    CBBing
        22
    CBBing  
    OP
       2016-05-08 15:30:30 +08:00
    @Choyes 恩,我现在已经设置了主键自动生成
    zkd8907
        23
    zkd8907  
       2016-05-08 15:35:08 +08:00   1
    @CBBing 之前有没有过 ID 是 22 的记录?
    dong3580
        24
    dong3580  
       2016-05-08 15:36:47 +08:00   1
    @CBBing
    1.设不设置主键无关紧要;
    2.主键不能为空;
    3.不能有相同的主键;
    jame
        25
    jame  
       2016-05-08 17:37:21 +08:00   1
    捕捉一下异常

    if (ex is DbEntityValidationException)
    message = ((DbEntityValidationException)ex).EntityValidationErrors.First().ValidationErrors.First().ErrorMessage;
    CBBing
        26
    CBBing  
    OP
       2016-05-08 18:43:50 +08:00
    @zkd8907 没有,只有一条 Id=1 的记录
    CBBing
        27
    CBBing  
    OP
       2016-05-08 18:44:55 +08:00
    @dong3580 设了 Id 为主键且只有一个,主键不为空,手动赋值为 22
    CBBing
        28
    CBBing  
    OP
       2016-05-08 18:46:30 +08:00
    @jame 我的理解是异常在前面的图里就有,还是说有些异常需要手动捕捉?
    CBBing
        29
    CBBing  
    OP
       2016-05-08 18:52:37 +08:00
    jame
        30
    jame  
       2016-05-08 19:41:44 +08:00   1
    Linq 不显示详细信息,需要使用如下代码才能显示明细。
    try {
    db.saveChanges();
    }catch(Exception ex){
    if (ex is DbEntityValidationException)
    message = ((DbEntityValidationException)ex).EntityValidationErrors.First().ValidationErrors.First().ErrorMessage;
    }
    CBBing
        31
    CBBing  
    OP
       2016-05-09 13:24:06 +08:00
    @jame 谢谢,我试试看
    CBBing
        32
    CBBing  
    OP
       2016-05-09 13:33:47 +08:00
    @jame 我出错时的数据表名 Comments,model 的类是 Comment,但表中还有一个属性名为 comment,我把主键设置为自增之后,还是不能插入数据库,但是我把名为 comment 的属性改为 review 之后,一切都正常了。而且刚刚我测试现在的代码也没有报错,我在想是不是属性名和 model 类名有冲突?
    jame
        33
    jame  
       2016-05-09 13:47:48 +08:00   1
    把 EF 中的相关表删掉,重新拉取。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5151 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 08:17 PVG 16:17 LAX 00:17 JFK 03:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86