使用Entity Framework将数据保存至Azure数据库的技术实现咨询
嘿,我看到你已经在CurrentMovie类里写了SaveRecord方法,用来把电影数据保存到Azure上的数据库里。先把你提供的代码用规范的格式整理出来:
public class CurrentMovie { public int ID { get; set; } public string title { get; set; } public Nullable<int> release { get; set; } public string image { get; set; } public void SaveRecord(int? ID, string title, Nullable<int> release, string image) { var context = new movie_generationsEntities(); var movie_record = new movie_generations(); ID = movie_record.movieID; title = movie_record.... // 这里代码看起来没写完 } }
从现有代码来看,有几个关键问题需要调整,不然没法正常完成数据保存:
- 赋值逻辑搞反了:你现在是把实体
movie_record的属性值赋给方法参数,这完全颠倒了——应该把方法接收的参数值赋值给movie_record的对应属性,比如movie_record.movieID = ID;(如果movieID是数据库自增主键,其实不用手动赋值,数据库会自动生成) - 参数与类属性重名:方法里的
ID、title等参数和类本身的属性同名,容易造成混淆,要么给参数加前缀(比如newId、newTitle),要么用this关键字明确指向类的属性 - 缺少数据库提交操作:光创建实体、赋值还不够,需要先把实体添加到上下文,再调用
SaveChanges()才能把数据真正同步到Azure数据库 - 上下文资源未释放:数据库上下文需要及时释放,建议用
using语句包裹,避免资源泄漏
给你一个修正后的示例代码参考:
public class CurrentMovie { // 建议属性名用帕斯卡命名法,符合C#编码规范 public int ID { get; set; } public string Title { get; set; } public int? ReleaseYear { get; set; } public string ImageUrl { get; set; } public void SaveRecord(int? movieId, string title, int? releaseYear, string imageUrl) { // using语句会自动释放上下文资源 using (var context = new movie_generationsEntities()) { var movieRecord = new movie_generations(); // 非自增主键才需要手动赋值 if (movieId.HasValue) { movieRecord.movieID = movieId.Value; } movieRecord.title = title; movieRecord.release = releaseYear; movieRecord.image = imageUrl; // 将实体添加到上下文 context.movie_generations.Add(movieRecord); // 提交更改到数据库 context.SaveChanges(); } } }
额外提一句:如果CurrentMovie本身就是对应数据库表的实体类,其实可以不用单独写SaveRecord方法,直接通过上下文操作它即可;如果是DTO(数据传输对象)类,那现在的写法就很合适。
内容的提问来源于stack exchange,提问作者pycan
相关产品推荐
相关产品推荐

