我有以下代码,我想用它来向我的EF添加数据 数据库:
var applicationNames = new[] {
"C",
"E",
"S" };
var testAccountNames = new[] {
"Production",
"Ready",
"Beta",
"Alpha" };
foreach (string applicationName in applicationNames)
{
_uow.Applications.Add(
new Application
{
Name = applicationName,
ModifiedDate = DateTime.Now
});
foreach (string testAccountName in testAccountNames)
{
new TestAccount
{
ApplicationID = ??
Name = applicationName,
ModifiedDate = DateTime.Now
});
}
}
_uow.Commit();
以下是我的课程:
public partial class Application
{
public Application()
{
this.TestAccounts = new List<TestAccount>();
}
public int ApplicationId { get; set; }
public string Name { get; set; }
public byte[] RowVersion { get; set; }
public System.DateTime ModifiedDate { get; set; }
public virtual ICollection<TestAccount> TestAccounts { get; set; }
}
public partial class TestAccount
{
public TestAccount()
{
this.Subjects = new List<Subject>();
}
public int TestAccountId { get; set; }
public string Name { get; set; }
public int ApplicationId { get; set; }
public byte[] RowVersion { get; set; }
public System.DateTime ModifiedDate { get; set; }
public virtual Application Application { get; set; }
public virtual ICollection<Subject> Subjects { get; set; }
}
这是我用于添加方法的代码
public virtual void Add(T entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State != EntityState.Detached)
{
dbEntityEntry.State = EntityState.Added;
}
else
{
DbSet.Add(entity);
}
}
这是映射:
public TestAccountMap()
{
// Primary Key
this.HasKey(t => t.TestAccountId);
// Relationships
this.HasRequired(t => t.Application)
.WithMany(t => t.TestAccounts)
.HasForeignKey(d => d.ApplicationId);
}
请注意,在数据库中,ApplicationId和TestId是标识数据类型。 我还有一个正确链接的ApplicationID的外键 应用程序表到TestAccount表中的ApplicationId。
如何使EF将数据插入正确的ApplicationID 在插入数据库时进入TestAccount表吗?
答案 0 :(得分:0)
foreach (string applicationName in applicationNames)
{
var app = new Application
{
Name = applicationName,
ModifiedDate = DateTime.Now
});
_uow.Applications.Add(app);
foreach (string testAccountName in testAccountNames)
{
new TestAccount
{
Application = app ,
Name = applicationName,
ModifiedDate = DateTime.Now
});
}
}
答案 1 :(得分:0)
不要直接设置ID,设置引用属性,EF会对其余属性进行排序,如下所示:
....
foreach (string applicationName in applicationNames)
{
_uow.Applications.Add(
new Application
{
Name = applicationName,
ModifiedDate = DateTime.Now,
TestAccounts = (from testAccountName in testAccountNames
select new TestAccount
{
Name = testAccountName ,
ModifiedDate = DateTime.Now
})
}
}