Entity Framework一对多关系添加数据的两种方式
当使用Entity Framework添加一对多关系数据的时候,通常先添加一的数据,然后再添加多的数据。类似这样:
//添加一的数据
var category = new Category{Name="类别1"};
category = context.Categories.Add(category); //添加多的数据
for(var i = ; i < ; i++)
{
context.Products.Add(new Product{
Name = "产品" + i,
CategoryId = category.Id});
} context.SaveChanges();
以上,我们对Category和Product分别进行了Add操作,然后统一SaveChanges。是否可以对Category的Products属性赋值,只对Catetegory进行Add,然后SaveChanges呢?
也就是按如下:
var category = new Category{Name="类别1"};
for(var i = ; i < ; i++){
category.Products.Add(new Product{
Name="产品" + i,
Category = category
});
}
context.Categories.Add(category);
context.SaveChanges();
那就验证下。
来两个一对多关系的领域模型。
public class Product
{
public int Id { get; set; }
public string Name { get; set; } public int CategoryId { get; set; }
public virtual Category Category { get; set; }
} public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; } public Category()
{
Products = new List<Product>();
}
}
创建上下文:
public class EFTestContext: DbContext
{
public EFTestContext() : base("conn")
{ } public DbSet<Category> Categories { get; set; } }
配置连接字符串:
<connectionStrings>
<add name="conn"
connectionString="Data Source=.;User=YourUsername;Password=YourPassword;Initial Catalog=EFTest;Integrated Security=True"
providerName="System.Data.SqlClient"/>
</connectionStrings>
客户端程序:
static void Main(string[] args)
{
using (var context = new EFTestContext())
{
var category = new Category
{
Name = "产品类别3"
}; for(var i=;i<;i++)
{
category.Products.Add(new Product {
Name = "产品" + i,
//Category = category
CategoryId = category.Id
});
} context.Categories.Add(category);
context.SaveChanges();
} Console.WriteLine("运行结束");
Console.ReadKey();
}
运行成功。
总结:当使用Entity Framework添加一对多关系数据的时候,我们通过给一的集合属性赋值,只context.代表一的表s.Add(代表一的实例),也同样可以在数据库中为代表多的那个表添加数据。并且,代表多的那个DbSet不设置也行。
Entity Framework一对多关系添加数据的两种方式的更多相关文章
- SparkStreaming获取kafka数据的两种方式:Receiver与Direct
简介: Spark-Streaming获取kafka数据的两种方式-Receiver与Direct的方式,可以简单理解成: Receiver方式是通过zookeeper来连接kafka队列, Dire ...
- SparkStreaming与Kafka,SparkStreaming接收Kafka数据的两种方式
SparkStreaming接收Kafka数据的两种方式 SparkStreaming接收数据原理 一.SparkStreaming + Kafka Receiver模式 二.SparkStreami ...
- 【代码笔记】iOS-向服务器传JSON数据的两种方式
一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...
- angular学习笔记(三)-视图绑定数据的两种方式
绑定数据有两种方式: <!DOCTYPE html> <html ng-app> <head> <title>2.2显示文本</title> ...
- C++读取字符串数据的两种方式
C++读取字符串数据的两种方式 对于同样的样例输入: ladder came tape soon leader acme RIDE lone Dreis peat ScAlE orb eye Ride ...
- easyUI之datagrid绑定后端返回数据的两种方式
先来看一下某一位大佬留下的easyUI的API对datagrid绑定数据的两种方式的介绍. 虽然精简,但是,很具有“师傅领进门,修行靠个人”的精神,先发自内心的赞一个. 但是,很多人和小编一样,第一次 ...
- 关于MySQL中添加数据的两种方法
下面介绍两种执行SQL命令的方法,并作出相应地总结,第一种介绍一种常规用法,下面进行做简要地分析,首先我们需要执行打开数据库操作首先创建一个MySqlConnection对象,在其构造函数中传入一个连 ...
- iOS 通过URL网络获取XML数据的两种方式
转载于:http://blog.csdn.net/crayondeng/article/details/8738768 下面简单介绍如何通过url获取xml的两种方式. 第一种方式相对简单,使用NSD ...
- ORACLE导入大量数据的两种方式比较
不管是开发还是测试,工作中经常需要去批量新增测试数据,但是大量数据的新增速度有时候让我们苦不堪言,下面通过两种方式完成oracle数据的批量新增,比较两种方式的效率. 第一种方式:采用工具导入sql文 ...
随机推荐
- iOS静态库.a文件制作和导入使用
iOS静态库.a文件制作: 1.新建Cocoa Touch Static Library工程 新建工程 - 选择iOS-FrameWork&Libary,选择 Cocoa Touch Stat ...
- 专题:Channel Bonding/bonding
EtherChannel最初是由cisco提出,通过聚合多条物理链路为单条逻辑链路,从而实现高可用及提高吞吐量等目的.AgP(Port Aggregation Protocol,Cisco专有协议). ...
- 学习python之练习(二)
#2.已知a1=1,a2=2,an=a(n-1)+a(n-2)(n>=3),求数列{a1,a2,a3....an}的总和 import math arr = [0]*100 num = 0 fo ...
- UML用例图中泛化、扩展、包括
在画用例图的时候,理清用例之间的关系是重点.用例的关系有泛化(generalization).扩展(extend)和包含(include).其中include和extend最易混淆.下面我们结合实例彻 ...
- utime函数
utime函数:对一个文件的访问和修改时间 #include <utime.h> int utime( const char *pathname, const struct utimbuf ...
- umask函数
umask函数为进程设置文件模式创建屏蔽字,并返回以前的值. #include <sys/stat.h> mode_t umask( mode_t cmask); 返回值:以前的文件模式创 ...
- React Native填坑之旅--HTTP请求篇
如果不能从头到尾的建立一个RN应用,那么RN将失色不少.本以为HTTP请求部分需要使用Native的实现,Android和iOS各回各家,各调各库了.Google了一下之后居然RN可以使用fetch库 ...
- Windows,linux快捷键
Window系统 按着Alt + 鼠标左键点击 = 直接打开点击空间的属性
- Hibernate映射问题之OneToOne【自己整理】
首先贴上一个MkYong的例子 stock.java package com.mkyong.stock; import javax.persistence.CascadeType; import ja ...
- codeforces 427E
题意:给定一位空间里n个点的坐标,每个坐标有一个罪犯,现在要建一个警局,并且这个警局只有一辆车,车一次最多载m个人,问应建在哪是的抓回所有罪犯的路程和最小. 思路: 很明显建在罪犯的点上一定可以找到最 ...