代码改变世界

mvc4项目数据库优先的尝试

2014-04-10 17:11  P.C ++  阅读(335)  评论(0编辑  收藏  举报

  对于mvc代码优先原则,感觉真不知道为什么硬要设计这种模式,代码优先使得每次运行程序都要重建数据库,现实中这种模式有什么用呢。

  数据库优先可能有好多方式,看了好久才做出来一种比较简单的。通过先添加一个ADO.NET实体数据库模型,创建同数据库的连接,再添加一个Controller,实现对刚生成数据库模型文件的调用,完成mvc项目对本地数据库的增删改查。

  步骤如下:

  1.在服务器资源管理器创建你所要访问的数据库连接。

  2.在项目中添加一个ADO.NET 实体数据库模型(我把这个模型添加在了一个ADO.Data的文件夹下了)。右键项目-》添加-》右侧数据-》ADO.NET 实体数据库模型-》选择从数据库生成-》找到你的数据库连接-》选择你需要的数据表-》完成。

这个时候你应该得到一个这个文件了,如果命名时选的默认:

 

  Model1.Designer.cs里面,已经写入了对student表的增删改查操作:

  

  1 //------------------------------------------------------------------------------
  2 // <auto-generated>
  3 //    此代码是根据模板生成的。
  4 //
  5 //    手动更改此文件可能会导致应用程序中发生异常行为。
  6 //    如果重新生成代码,则将覆盖对此文件的手动更改。
  7 // </auto-generated>
  8 //------------------------------------------------------------------------------
  9 
 10 using System;
 11 using System.ComponentModel;
 12 using System.Data.EntityClient;
 13 using System.Data.Objects;
 14 using System.Data.Objects.DataClasses;
 15 using System.Linq;
 16 using System.Runtime.Serialization;
 17 using System.Xml.Serialization;
 18 
 19 [assembly: EdmSchemaAttribute()]
 20 namespace MvcApp410DF.ADO.Data
 21 {
 22     #region 上下文
 23     
 24     /// <summary>
 25     /// 没有元数据文档可用。
 26     /// </summary>
 27     public partial class ceshiEntities : ObjectContext
 28     {
 29         #region 构造函数
 30     
 31         /// <summary>
 32         /// 请使用应用程序配置文件的“ceshiEntities”部分中的连接字符串初始化新 ceshiEntities 对象。
 33         /// </summary>
 34         public ceshiEntities() : base("name=ceshiEntities", "ceshiEntities")
 35         {
 36             this.ContextOptions.LazyLoadingEnabled = true;
 37             OnContextCreated();
 38         }
 39     
 40         /// <summary>
 41         /// 初始化新的 ceshiEntities 对象。
 42         /// </summary>
 43         public ceshiEntities(string connectionString) : base(connectionString, "ceshiEntities")
 44         {
 45             this.ContextOptions.LazyLoadingEnabled = true;
 46             OnContextCreated();
 47         }
 48     
 49         /// <summary>
 50         /// 初始化新的 ceshiEntities 对象。
 51         /// </summary>
 52         public ceshiEntities(EntityConnection connection) : base(connection, "ceshiEntities")
 53         {
 54             this.ContextOptions.LazyLoadingEnabled = true;
 55             OnContextCreated();
 56         }
 57     
 58         #endregion
 59     
 60         #region 分部方法
 61     
 62         partial void OnContextCreated();
 63     
 64         #endregion
 65     
 66         #region ObjectSet 属性
 67     
 68         /// <summary>
 69         /// 没有元数据文档可用。
 70         /// </summary>
 71         public ObjectSet<student> students
 72         {
 73             get
 74             {
 75                 if ((_students == null))
 76                 {
 77                     _students = base.CreateObjectSet<student>("students");
 78                 }
 79                 return _students;
 80             }
 81         }
 82         private ObjectSet<student> _students;
 83 
 84         #endregion
 85 
 86         #region AddTo 方法
 87     
 88         /// <summary>
 89         /// 用于向 students EntitySet 添加新对象的方法,已弃用。请考虑改用关联的 ObjectSet&lt;T&gt; 属性的 .Add 方法。
 90         /// </summary>
 91         public void AddTostudents(student student)
 92         {
 93             base.AddObject("students", student);
 94         }
 95 
 96         #endregion
 97 
 98     }
 99 
100     #endregion
101 
102     #region 实体
103     
104     /// <summary>
105     /// 没有元数据文档可用。
106     /// </summary>
107     [EdmEntityTypeAttribute(NamespaceName="ceshiModel", Name="student")]
108     [Serializable()]
109     [DataContractAttribute(IsReference=true)]
110     public partial class student : EntityObject
111     {
112         #region 工厂方法
113     
114         /// <summary>
115         /// 创建新的 student 对象。
116         /// </summary>
117         /// <param name="s_id">s_id 属性的初始值。</param>
118         /// <param name="sname">sname 属性的初始值。</param>
119         /// <param name="spswd">spswd 属性的初始值。</param>
120         public static student Createstudent(global::System.String s_id, global::System.String sname, global::System.String spswd)
121         {
122             student student = new student();
123             student.s_id = s_id;
124             student.sname = sname;
125             student.spswd = spswd;
126             return student;
127         }
128 
129         #endregion
130 
131         #region 基元属性
132     
133         /// <summary>
134         /// 没有元数据文档可用。
135         /// </summary>
136         [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
137         [DataMemberAttribute()]
138         public global::System.String s_id
139         {
140             get
141             {
142                 return _s_id;
143             }
144             set
145             {
146                 if (_s_id != value)
147                 {
148                     Ons_idChanging(value);
149                     ReportPropertyChanging("s_id");
150                     _s_id = StructuralObject.SetValidValue(value, false);
151                     ReportPropertyChanged("s_id");
152                     Ons_idChanged();
153                 }
154             }
155         }
156         private global::System.String _s_id;
157         partial void Ons_idChanging(global::System.String value);
158         partial void Ons_idChanged();
159     
160         /// <summary>
161         /// 没有元数据文档可用。
162         /// </summary>
163         [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
164         [DataMemberAttribute()]
165         public global::System.String sname
166         {
167             get
168             {
169                 return _sname;
170             }
171             set
172             {
173                 OnsnameChanging(value);
174                 ReportPropertyChanging("sname");
175                 _sname = StructuralObject.SetValidValue(value, false);
176                 ReportPropertyChanged("sname");
177                 OnsnameChanged();
178             }
179         }
180         private global::System.String _sname;
181         partial void OnsnameChanging(global::System.String value);
182         partial void OnsnameChanged();
183     
184         /// <summary>
185         /// 没有元数据文档可用。
186         /// </summary>
187         [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
188         [DataMemberAttribute()]
189         public global::System.String spswd
190         {
191             get
192             {
193                 return _spswd;
194             }
195             set
196             {
197                 OnspswdChanging(value);
198                 ReportPropertyChanging("spswd");
199                 _spswd = StructuralObject.SetValidValue(value, false);
200                 ReportPropertyChanged("spswd");
201                 OnspswdChanged();
202             }
203         }
204         private global::System.String _spswd;
205         partial void OnspswdChanging(global::System.String value);
206         partial void OnspswdChanged();
207     
208         /// <summary>
209         /// 没有元数据文档可用。
210         /// </summary>
211         [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
212         [DataMemberAttribute()]
213         public global::System.String ssex
214         {
215             get
216             {
217                 return _ssex;
218             }
219             set
220             {
221                 OnssexChanging(value);
222                 ReportPropertyChanging("ssex");
223                 _ssex = StructuralObject.SetValidValue(value, true);
224                 ReportPropertyChanged("ssex");
225                 OnssexChanged();
226             }
227         }
228         private global::System.String _ssex;
229         partial void OnssexChanging(global::System.String value);
230         partial void OnssexChanged();
231     
232         /// <summary>
233         /// 没有元数据文档可用。
234         /// </summary>
235         [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
236         [DataMemberAttribute()]
237         public Nullable<global::System.Int32> sage
238         {
239             get
240             {
241                 return _sage;
242             }
243             set
244             {
245                 OnsageChanging(value);
246                 ReportPropertyChanging("sage");
247                 _sage = StructuralObject.SetValidValue(value);
248                 ReportPropertyChanged("sage");
249                 OnsageChanged();
250             }
251         }
252         private Nullable<global::System.Int32> _sage;
253         partial void OnsageChanging(Nullable<global::System.Int32> value);
254         partial void OnsageChanged();
255 
256         #endregion
257 
258     
259     }
260 
261     #endregion
262 
263     
264 }
View Code

  在web.config文件里也添加了一项connectionstrings:

<add name="ceshiEntities" connectionString="metadata=res://*/ADO.Data.Model1.csdl|res://*/ADO.Data.Model1.ssdl|res://*/ADO.Data.Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=localhost;initial catalog=ceshi;persist security info=True;user id=sa;password=1234;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

 

  3.点击生成-》生成解决方案。

  4.在Controllers下面添加你的controller。

  

  注意你的Model class 和 Data context class 对应着在前面ADO.NET数据库模型中生成的类。

  点击添加后如果不出现问题,应该没问题了。

运行下程序,更改路径到你的controller指定的页面:

 

  有一点需要说明,这种数据库优的系统在数据库表结构改变的时候要对相应的class结构进行更改。

more:http://msdn.microsoft.com/en-us/data/jj200620.aspx