首页 新闻 会员 周边 捐助

EF一对多新增问题

0
悬赏园豆:10 [已解决问题] 解决于 2017-09-15 00:29

问个EF的问题:
表A与表B是一对多的关系。
一个a有多个b。
现在要创建一个b
现在从数据库读取一个a
我是这么做的:
A a=从数据库读取一个A;
B b=new B();
b.xxx=给b属性赋值
b.a=a;
dbcontext.B.add(b);
执行数据库操作,B表会新增一条记录b。
但是A表也将刚才读取的a记录,再次插入到A表中。
怎么解决这个问题呢?
凌晨10点13分的主页 凌晨10点13分 | 初学一级 | 园豆:179
提问于:2017-07-17 23:57
< >
分享
最佳答案
0

static void Main(string[] args)
{
try
{
MyContext db = new MyContext();

var a = db.a.First();
B b4 = new B
{
name = "B4"
};
b4.a = a;

db.b.Add(b4);
db.SaveChanges();

Console.Write("success");

}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}

 

public class A
{
[Key]
public int Aid { get; set; }
public string name { get; set; }

public virtual List<B> bList { get; set; }
}

 

public class B
{
[Key]
public int Bid { get; set; }
[ForeignKey("a")]
public int Aid { get; set; }
public string name { get; set; }

public virtual A a { get; set; }
}

 这样是可以实现你的需求的 

收获园豆:4
hcxgo | 菜鸟二级 |园豆:206 | 2017-07-18 10:17
其他回答(2)
0

不要执行b.a=a,这一句,试一下

收获园豆:3
NightKey | 园豆:207 (菜鸟二级) | 2017-07-18 08:39
B类 里面,只有A的实体,没有直接显式的外键

然后B表示这样的  bid,***,b_aid
b_aid就是外键了
不执行b.a=a的话,这个b_aid估计就没值了
支持(0) 反对(0) 凌晨10点13分 | 园豆:179 (初学一级) | 2017-07-18 09:11

@凌晨10点13分: 如果加个外键有什么问题

支持(0) 反对(0) NightKey | 园豆:207 (菜鸟二级) | 2017-07-18 09:22
0

不要执行b.a=a

收获园豆:3
fcyh | 园豆:568 (小虾三级) | 2017-07-18 09:04
B类 里面,只有A的实体,没有直接显式的外键

然后B表示这样的  bid,***,b_aid
b_aid就是外键了

不执行b.a=a的话,这个b_aid估计就没值了

支持(0) 反对(0) 凌晨10点13分 | 园豆:179 (初学一级) | 2017-07-18 09:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册