如何将EF插入数据到包含来自另一个表的键值的表中?

时间:2013-03-25 12:45:12

标签: c# sql-server entity-framework entity-framework-4

我有以下代码,我想用它来向我的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表吗?

2 个答案:

答案 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 
                               })
            }
    }
相关问题