Tôi có một cơ sở dữ liệu hiện có với hai bảng MailServers
và MailDomains
trong đó. MailDomains
có cột khóa ngoài MailServerId
trỏ đến cột chính Id
chính trong MailServers
. Vì vậy, chúng tôi có mối quan hệ một - nhiều ở đây.Entity Framework 6: Thêm đối tượng con vào danh sách của cha mẹ so với thuộc tính điều hướng của thiết lập cho cha mẹ
Tôi đã theo dõi this article và tạo POCO khung thực thể của mình thông qua mô hình "Mã đầu tiên từ cơ sở dữ liệu" trong Trình hướng dẫn mô hình dữ liệu thực thể. Điều này tạo ra hai lớp C# sau:
public partial class MailServer
{
public MailServer()
{
MailDomains = new HashSet<MailDomain>();
}
public int Id { get; set; }
public virtual ICollection<MailDomain> MailDomains { get; set; }
}
public partial class MailDomain
{
public MailDomain()
{
}
public int Id { get; set; }
public string DomainName { get; set; }
public int MailServerId { get; set; }
public virtual MailServer MailServer { get; set; }
}
Bây giờ câu hỏi của tôi là liệu có sự khác biệt nào giữa hai cách tiếp cận tạo và chèn đối tượng mới vào cơ sở dữ liệu.
Tiếp cận (A): Thêm trẻ mới vào danh sách của cha mẹ:
var mailServer = new MailServer();
var mailDomain = new MailDomain() {
DomainName = "foobar.net",
};
mailServer.MailDomains.Add(mailDomain);
using(var context = new MyContext){
context.MailServers.Add(mailServer);
context.SaveChanges();
}
Approach (B): Thiết lập tài sản chuyển hướng của trẻ để phụ huynh:
var mailServer = new MailServer();
var mailDomain = new MailDomain() {
DomainName = "foobar.net",
MailServer = mailServer,
};
using(var context = new MyContext){
context.MailDomains.Add(mailDomain);
context.SaveChanges();
}
Tôi cũng giả định rằng trong cách tiếp cận (A) phiên bản MailDomain
mới được tự động thêm vào bộ sưu tập context.MailDomains
trong khi tiếp cận (B) phiên bản MailServer
mới được tự động thêm vào bộ sưu tập context.MailServers
. Điều đó đúng hay tôi phải làm điều đó theo cách thủ công?
Vì vậy, một lần nữa, câu hỏi của tôi là: hai phương pháp có thể hoán đổi cho nhau không? Nó chỉ gây nhầm lẫn cho tôi rằng trong cơ sở dữ liệu chỉ có một thuộc tính/cột để đặt (cụ thể là khóa ngoài trong MailDomains
) trong khi mã C# có hai thuộc tính (một trong mỗi lớp) có thể được sửa đổi.