【发布时间】:2014-09-02 08:14:59
【问题描述】:
我有一个现有的数据库,其中包含两个表 MailServers 和 MailDomains。 MailDomains 的外键列 MailServerId 指向 MailServers 中的 Id 主键列。所以我们这里是一对多的关系。
我关注this article,并通过实体数据模型向导中的“数据库代码优先”模型创建了我的实体框架 POCO。这产生了以下两个 C# 类:
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; }
}
现在我的问题是以下两种在数据库中创建和插入新对象的方法是否有区别。
方法(A):将新子添加到父列表中:
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();
}
方法(B):将子级的导航属性设置为父级:
var mailServer = new MailServer();
var mailDomain = new MailDomain() {
DomainName = "foobar.net",
MailServer = mailServer,
};
using(var context = new MyContext){
context.MailDomains.Add(mailDomain);
context.SaveChanges();
}
我还假设在方法 (A) 中,新的 MailDomain 实例会自动添加到集合 context.MailDomains 中,而在方法 (B) 中,新的 MailServer 实例会自动添加到集合 context.MailServers 中。这是正确的还是我必须手动执行?
我的问题是:这两种方法可以互换吗?
只是让我感到困惑的是,在数据库中只有一个属性/列需要设置(即MailDomains 中的外键),而在 C# 代码中有两个属性(每个类中一个)可以修改。
【问题讨论】:
标签: c# asp.net entity-framework entity-framework-6