V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
CBBing
V2EX  ›  .NET

ASP.NET 写数据库错误

  •  
  •   CBBing · 2016-05-07 23:24:41 +08:00 · 3369 次点击
    这是一个创建于 3120 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 是唯一的?
    C0dEr
        6
    C0dEr  
       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   ·   实用小工具   ·   2090 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 16:14 · PVG 00:14 · LAX 08:14 · JFK 11:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.