首页 新闻 赞助 找找看

MVC3中实体框架在调试模式下产生ConstraintException异常:该属性不能设置为null值.

0
悬赏园豆:80 [待解决问题]

今天在MVC3下使用实体框架遇到一个奇怪的问题,几经找寻无结果,特寻求帮助

新建MVC3项目,然后在Models文件夹中添加新项:ADO.NET 实体数据模型,选择Northwind数据库,选择全部的表,然后继续操作完成.重新生成项目,此时已经有一个Model1.edmx的文件在Models里面了.

在Controllers文件夹中添加新的Controller,此处选择Shipper表,键入ShipperController,模板选择第二个包含读写的使用Entity Framework,选择实体Shipper,然后选择上下文NorthwindEntities,也就是此前添加的Model1.edmx.

重新生成项目,按F5启动调试,在浏览器查看页面.浏览刚添加的对Shipper表的操作页面,选择Create New,跳转到添加页面,什么都不输入,直接点击Create按钮,异常就出现了.(如图1)进入了VS的调试状态,并显示异常的位置,中断调试模式,页面正常显示,正常验证,并提示”值无效”.(如图2)当再次点击Create New,并直接点击Create的时候,没有异常显示,并正常提示,不知道这是为什么.查阅异常名称,也不得其解.

图1

图2

< >
分享
所有回答(1)
0

就是说你不能设置为 null 值。

Launcher | 园豆:45045 (高人七级) | 2013-01-08 17:36

嗯,在调试状态(F5)下,提示不能设置为null

在运行状态下(Ctrl+F5),什么都不输入,直接点Create(添加)的时候,是出提示信息"值“”无效。"

支持(0) 反对(0) 晴空万里i | 园豆:34 (初学一级) | 2013-01-08 18:24

MVC3会自带非空验证,但是在调试模式下,按照上述的操作,似乎未触发验证.

支持(0) 反对(0) 晴空万里i | 园豆:34 (初学一级) | 2013-01-08 19:02

@晴空万里i: 你能把你的 Create 的代码贴出来吗?

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2013-01-09 09:24

@Launcher: Create就是自动生成的代码哈

View Code
 1         //
 2         // GET: /Shipper/Create
 3 
 4         public ActionResult Create()
 5         {
 6             return View();
 7         } 
 8 
 9         //
10         // POST: /Shipper/Create
11 
12         [HttpPost]
13         public ActionResult Create(Shipper shipper)
14         {
15             if (ModelState.IsValid)
16             {
17                 db.Shippers.AddObject(shipper);
18                 db.SaveChanges();
19                 return RedirectToAction("Index");  
20             }
21 
22             return View(shipper);
23         }
支持(0) 反对(0) 晴空万里i | 园豆:34 (初学一级) | 2013-01-14 10:26

@晴空万里i: 代码没有问题,如果你为 CompanyName 指定了验证规则的话, 当你不输入值的时候,ModelState.IsValid 应该是 false,请你自行检查下。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2013-01-14 10:32

就是实体框架添加以后,添加Controller的时候默认生成的方法哈.

支持(0) 反对(0) 晴空万里i | 园豆:34 (初学一级) | 2013-01-14 10:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册