zoukankan      html  css  js  c++  java
  • (转)MVC3+EntityFramework实践笔记

    原文地址:http://www.cnblogs.com/cbcye/archive/2012/05/07/2487779.html

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

    1. DataContext的选择

    image

    遇到的第一个问题就是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支持将存储过程映射到实体类的添加、删除、修改中。

    image

    image

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

    3. 导入存储过程方法

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

    image

    在代码里直接使用:

    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上,倒腾了半天把好几个重要的文件都给弄丢了。还好在酷盘的已删除里找到了,不然就白努力了。

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

    image

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

    6.总结

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

  • 相关阅读:
    OOP3(继承中的类作用域/构造函数与拷贝控制/继承与容器)
    OOP2(虚函数/抽象基类/访问控制与继承)
    OOP1(定义基类和派生类)
    拷贝控制3(对象移动)
    拷贝控制2(拷贝控制和资源管理/交换操作/动态内存管理)
    拷贝控制1(拷贝、赋值与销毁)
    动态内存2(动态数组)
    python--numpy模块、spicy模块、 matplotlib模块
    Java--23种设计模式之decorator模式
    Android开发---开发文档翻译
  • 原文地址:https://www.cnblogs.com/fcsh820/p/2491844.html
Copyright © 2011-2022 走看看