比方说,我有两个表,A
和B
,其中A
有一个外键指向B
。如何使用实体框架进行交易?
这里的数据库的外观:
A: | B:
|
id (int) | b (foreign B) | id (int)
---------+-------------- | --------
1 | 2 | 2
2 | 5 | 5
3 | 2 |
我现在想同时插入A
类型的新对象,并B
类型的新对象到数据库中,与新A
引用新B
。而且,它们都必须插入到同一个事务中,因为我不允许例如只有B
被插入,但A
失败。
不过,我不知道如何插入A
不首先单独插入B
,因为我只了解B
插入B.id
后:B.id
得到由数据库作为一个递增的主键分配。
这是想我写的,但不能:
b = new B { };
a = new A { b = b };
db.Add(b);
db.Add(a);
db.SaveChanges()
我怎样才能做到这一点使用实体框架?
谢谢!
TableB中的ID列是它的标识列吗? –
是的,'A.id'和'B.id'都是。我会做一个额外的记录。 – liszt
EF默认使用事务(http://stackoverflow.com/questions/815586/entity-framework-using-transactions-or-savechangesfalse-and-acceptallchanges),只需添加两条记录并调用SaveChanges()即可。 – CodeCaster