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<T> 属性的 .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 }
在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="data source=localhost;initial catalog=ceshi;persist security info=True;user id=sa;password=1234;multipleactiveresultsets=True;App=EntityFramework"" 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