博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC3+EntityFramework实践笔记
阅读量:4355 次
发布时间:2019-06-07

本文共 3143 字,大约阅读时间需要 10 分钟。

最近项目想做一个员工统一工号生成的系统,本来可以直接让别的同事来做的,不过大家都在项目上忙不开,刚好也可以练练手于是就接过这个项目。之前虽然一直对MVC和Entity Framework有点了解,但是实际使用的时候还是有很多问题。本文是记录在项目开发过程中遇到的第一手问题及解决办法。 

1. DataContext的选择

遇到的第一个问题就是DtaContext的选择,之前以为根据生成的EDMX就可以直接选择Model生成Controller及View了。 不知道还需要Data context。好吧,初步查了一下Data Context是相关的底层数据连接、数据集定义的。

所以在生成Controller 的时候就选择表的类及创建时生成的Entity即可。

 

2. 数据校验

MVC提供了比较多的数据校验功能,但是很多提示是英文的

        [Required(ErrorMessage = 
"
必填
")]
        [DataType(DataType.Text)]
        [IDCardCheck]
        [Display(Name = 
"
身份证号
")]
        
public 
string PersonalID { 
get
set; }

一个简单办法就是声明ErrorMessage值,输入中文的错误提示信息。

如果需要自定义的验证的话,如上代码中的IDCardCheck,可以继承ValidationAttribute来实现

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = 
false, Inherited = 
true)]
    
public 
class IDCardCheckAttribute : ValidationAttribute
    {
        CheckHelper checkHelper = 
new CheckHelper();
        SSOEntities SSODB = 
new SSOEntities();
        
public 
override 
bool IsValid(
object value)
        {
            
if (
null == value)
                
return 
false;
            
try
            {
                
string personalID = value.ToString();
                
if (checkHelper.CheckIDCard(personalID))
                {
                    
int count = (
from p 
in SSODB.t_UserInfo 
where p.PersonalID == personalID 
select p).Count();
                    
if (count > 
0)
                    {
                        ErrorMessage = 
"
该身份证号码已存在!
";
                        
return 
false;
                    }
                }
                
else
                {
                    ErrorMessage = 
"
请输入正确的身份证号码
";
                    
return 
false;
                }
                
return 
true;
            }
            
catch (Exception exp)
            {
                ErrorMessage = 
"
请输入正确的身份证号码
";
                
return 
false;
            }
        }
    }

3. 映射存储过程

EDMX支持将存储过程映射到实体类的添加、删除、修改中。

映射之后调用的时候还是可以用类似于SSODB.t_UserInfo.AddObject(xxx);这种方式来调用但是实际执行的时候是执行存储过程了。

3. 导入存储过程方法

如果你想在存储过程里直接使用存储过程的方法,那么可以在Model Brower里的 Function Imports里导入存储过程。

在代码里直接使用:

SSODB.DeleteEmployee(id, currentUser);

 

4. CodeFirst 实现

EF4.1 开始引入了Model First/Database First/Code First 等功能,由于这个项目是在之前项目的项目上改过来的。所以没有完全用Code First来做。不过在找解决办法的过程中还是试了一下Code First。以下为 Code First相应的Model Class及Data Class的代码:

    
public 
class UserIDInfo
    {
        [Key]
        
public 
int UserId { 
get
set; }
        
public 
string Name { 
get
set; }
        
public System.DateTime CreateTime { 
get
set; }
        
public Nullable CreateUser { 
get
set; }
        
public 
string status { 
get
set; }
        
public 
string Sex { 
get
set; }
        
public 
string PersonalID { 
get
set; }
        
public 
string StaffNumber { 
get
set; }
        
public Nullable EntryDate { 
get
set; }
        
public Nullable SequenceNumber { 
get
set; }
    }
    
public 
class UserIDContext : DbContext
    {
        
public UserIDContext()
            : 
base(
"
UserIDInfoConnect
")
        {
        }
        
public DbSet UserIDInfos { 
get
set; }
     
    }

Web.Config的配置

 

  
<
connectionstrings
>
<
add 
name
="UserIDInfoConnect"
 connectionstring
="data source=.\SQLEXPRESS;Integrated Security=SSPI;initial catalog=SSO;User Instance=true"
 providername
="System.Data.SqlClient"
 
/>
  
</
connectionstrings
>

 

5. 代码云存储

特别需要说明的是这次使用酷盘+TFS的方式来管理代码。因为我在公司和家里总共有两台电脑,家里的网络又连不到TFS,因此需要代码同步,但是用U盘拷来拷去的太不方便了。因此想到了用酷盘作为代码文件的同步。当然我把数据库文件也作为同步的项了。这样在公司写完代码如果还想回家写的话直接到家打开电脑即可。还有最重要的一点是酷盘有版本控制的功能。这个项目里由于我脱离了TFS开发了好长时间,后来想把最新的代码迁到TFS上,倒腾了半天把好几个重要的文件都给弄丢了。还好在酷盘的已删除里找到了,不然就白努力了。

因此推荐给大家这个工具 访问地址: (通过该链接访问我可以增长点免费空间,感谢您的支持!),我使用过Dropbox/SkyDrive/微盘/快盘等几个工具,觉得在国内访问速度还有空间还是酷盘最好。

不过有一点需要提醒的是光有酷盘可能还是行。因为你无法为代码生成结构化的版本,比较打标签之类的。因此还要结合TFS来做代码的管理。

 

6.总结

通过小一周的开发体验觉得MVC+Entity Framework对于.NET 的Web开发来说还是强大了不少,当然由于开发时间紧以上的概念之外我可能说得不太准确,欢迎大家批评指证,以后得继续努力学习。

转载于:https://www.cnblogs.com/cbcye/archive/2012/05/07/2487779.html

你可能感兴趣的文章
【LOJ】#2290. 「THUWC 2017」随机二分图
查看>>
SSL-ZYC 活动安排
查看>>
Git clone 报错 128
查看>>
在Python中执行普通除法
查看>>
编译原理(第三版) 语法分析器
查看>>
c# 动态绘制直线和曲线
查看>>
Spring理解?
查看>>
删除无限循环的文件夹-删除递归文件夹
查看>>
Flash报表控件(FusionCharts) 使用
查看>>
本周总结
查看>>
使用C#和Java发送邮件(转载)
查看>>
Hadoop中eclipse 插件的编译 笔记四
查看>>
MariaDB备份之XtraBackup
查看>>
Activity间用Intent和Bundle传递参数
查看>>
记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty
查看>>
HDU4624 Endless Spin(概率&&dp)
查看>>
js-新闻无缝滚动
查看>>
Python在自动化运维时最常用的50个方法(转)
查看>>
Java 学习之路 之 泛型方法
查看>>
Test
查看>>