12

Let's assume that we have such classes

public class A{
    string someField { get; set; }
    public virtual B B {get; set; }
}

public class B {
   int someIntField {get; set; }

   [ForeignKey("Id")]
   [Required]
   public virtual A A { get; set; } 
}

In code I create new instances for both of them and making relation like:

A a = new A () { someField = "abcd"};
B b = new B () { someIntField = 42 };

A.B = b;
B.A = a;

Should I using DBContext to save both classes like that:

using (var db = new myDbContext()) {
    myDbContext.As.Add(A);
    myDbContext.Bs.Add(B);
    myDBContext.SaveChanges();
}

Or saving it like that:

using (var db = new myDbContext()) {
    myDbContext.As.Add(A);
    myDbContext.SaveChanges();
}

is enough to store related objects into database?

h__
  • 761
  • 3
  • 12
  • 41

3 Answers3

8

From your example, if you instantiate new entity objects and then assign the child to the parent object's property, then EF will actually create a new child instance (record) and map it to the parent as a reference.

Your code snippet is a bit confusing because you've got reference from A to B and B to A but consider the following:

if you had 2 entities:

public class A
{
    public int Id;
}

public class B
{
    public int Id;
    public A A;
}

and when saving you did something like this:

A a = new A();
B  b = new B();
b.A = a;
dbcontext.SaveChanges();

then EF will create a new record for A, a new record for B and add the reference of newly created A record to B.

See this post for further details

Community
  • 1
  • 1
amythn04
  • 388
  • 2
  • 11
2

Saving the object that contains the other object is enough. It will automatically persist the changes to contained objects as well.

You could just create a small example and see for yourself what works.

Jeroen Vannevel
  • 43,651
  • 22
  • 107
  • 170
0
using (var db = new myDbContext()) {
   myDbContext.As.Add(A);
   myDbContext.SaveChanges();
}

that should be enough.

sunil
  • 5,078
  • 6
  • 28
  • 33