场景模拟:

我们需要在不同的新闻站点中采集新闻信息,  所以需要在数据库中保存一个新闻站点表(Site) 一个新闻表(News) 两表之间的关系是        Site(1)-News(N)

数据库关系

实例:

程序运行后我们首先会加载新闻站点列表和采集规则,比如准备开始采集”新浪-国内新闻”板块的时候,解析出的所有新闻都保存在数据库中,在新闻表 Site_Id的值是新浪保存在News中的主键。

 

关联问题可参阅http://bbs.csdn.net/topics/391036710?page=1

解析:

如果我们采用原生sql来写的话,可能就是读取出Site的主键(此时早已读取出来保存在内存中 ),然后结合准备添加的News实体构造insert语句即可,不过EF的使用原则应该是:

子集的添加应该是添加到父集中的导航属性(ICollection<T>)

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication1
{
class Program
{ public class Site
{
[Key]
public int Id{ get; set; }
public string Name { get; set; } /*virtual 知识点关键字:EF三种关联加载 Lazy Loading,Eager Loading,Explicit Loading*/
public virtual ICollection<News> Newss { get; set; }
} public class News
{
[Key]
public int Id { get; set; } public string title { get; set; }
public string content { get; set; } public virtual Site Site { get; set; }
}
public class MyTestContent : DbContext
{
public MyTestContent( )
{
Database.SetInitializer<MyTestContent>(null);
}
public DbSet<Site> Site { get; set; }
public DbSet<News> News{ get; set; }
} static void saveSiteDemo( )
{
using (var db = new MyTestContent())
{
db.Site.Add(new Site
{
Name = "新浪"
}); db.SaveChanges();
}
} static void saveSiteDemo( string siteName )
{
//首先读取站点实体
using (var db = new MyTestContent())
{
Site site = db.Site.FirstOrDefault(one => one.Name == siteName); /*图1:站点下还没有新闻的时候容器为null 所以我们需要new一个出来*/
if (site.Newss == null)
{
site.Newss = new List<News>();
} /*将需要添加的子集 添加到父集的导航属性中*/
site.Newss.Add(new News
{
title = "新闻标题",
content = "新闻内容"
}); /*保存数据库 子集保存完成*/
db.SaveChanges(); /*图2:现在来读取子集看看有没有值*/
News news = db.News.FirstOrDefault();
/*图3:再来读取父集看看 读取出来的结果与图1有和不同*/
Site newSite = db.Site.FirstOrDefault();
}
} static void Main( string[] args )
{
saveSiteDemo();
saveSiteDemo("新浪");
}

 

 

 

最新文章

  1. 推荐一款Mac上好用的Markdown编辑器
  2. ios初级必看视频
  3. 字符串匹配算法之SimHash算法
  4. iOS 利用长按手势移动 Table View Cells
  5. 结队开发项目——基于Android的无线点餐系统——NABC模型
  6. QMessageBox 弹出框上的按钮设置为中文
  7. Android 全屏显示-隐藏Navigation Bar
  8. SpringBoot接口服务处理Whitelabel Error Page(转)
  9. alert()显示中文出现乱码
  10. 团队作业8----第二次项目冲刺(Beta阶段) 第二天
  11. Android四大组件(详细总结)
  12. JavaUtil_04_验证码生成器
  13. df 命令详解
  14. CCS的文本及字体
  15. zabbix分布式监控部署--技术流ken
  16. 第11章 AOF持久化
  17. js中获取时间new date()的用法和获取时间戳
  18. Freemarker导出word的简单使用
  19. [Python] 02 - String
  20. Docker用途 &amp; 和tomcat的区别

热门文章

  1. 基于anyrtc的sdk实现直播连麦互动
  2. postgresql 字符串拼接&quot;||“的使用
  3. Android手机出现&quot;已安装了存在签名冲突的同名数据包&quot;的原因及解决办法
  4. c语言学习之基础知识点介绍(十二):结构体的介绍
  5. 注册dll
  6. mysql分区功能详细介绍,以及实例
  7. spring mvc 笔记
  8. ZEngine游戏框架需求稿
  9. mysql query insert中文乱码
  10. html5异步上传图片显示上传文件进度条