用于将记录添加到数据库的Linq / Entity Framework语法

时间:2013-01-04 19:19:52

标签: linq entity-framework

我需要使用Entity Framework将记录添加到数据库中。由于我是使用这种语法的新手,我不知道如何正确编写代码(以下是我最好的猜测)。

首先,代理必须将其信息插入Agent表。此表生成一个称为SymNumber的自增量主键。然后我需要使用SymNumber并将其用作插入AgentIdentification表的主键。

我已经运行了几次这个代码,并且我没有提出错误,但是因为我使用单元测试来测试代码,所以无法确定代理是否正确添加。其次,我知道我没有正确地抓住第一次插入后SymNumber表生成的AgentSymNumber是Linq代码中设置为0的int值,在AgentIdentification插入期间不会更改。

非常感谢任何帮助!

        AgentResourcesEntities _db = new AgentResourcesEntities();

        try
        {
            Agent agent = new Agent();
            agent.EntityType = "P";
            agent.FirstName = agentNewTraining.FirstName;
            agent.LastName = agentNewTraining.LastName;
            agent.LastChangeOperator = agentNewTraining.Requestor;
            agent.LastChangeDate = DateTime.Now;
            if (!String.IsNullOrEmpty(agentNewTraining.NameSuffix)) agent.NameSuffix = agentNewTraining.NameSuffix;

            _db.Agent.AddObject(agent);

            AgentIdentification agentIdentification = new AgentIdentification();
            agentIdentification.SymNumber = agent.SymNumber;
            agentIdentification.ReferenceType = "S";
            agentIdentification.DummyReference = 0;
            agentIdentification.LastChangeOperator = agentNewTraining.Requestor;
            agentIdentification.LastChangeDate = DateTime.Now;

            _db.AgentIdentification.AddObject(agentIdentification);

            return true;
        }
        catch (Exception)
        {
            return false;
        }

2 个答案:

答案 0 :(得分:1)

首先你需要打电话

_db.SaveChanges();

让您的更改保持不变。

但是,如果您还需要同步(获取新生成的值)agent.SymNumber,则需要在将其添加到上下文后立即调用SaveChanges()

所以代码就像:

/// ...... ////
_db.Agent.AddObject(agent);
_db.SaveChanges();

AgentIdentification agentIdentification = new AgentIdentification();
agentIdentification.SymNumber = agent.SymNumber;  // sym number is now synchronized from DB
 ///...../////

_db.AgentIdentification.AddObject(agentIdentification);
_db.SaveChanges();

但是如果SymNumber是外键,那么AgentIdentification可以引用某个Agent实例,你可以将这些实例与该引用联系起来,而不需要调用那个SaveChanges()在中间。

答案 1 :(得分:0)

插入后调用_db.SaveChanges()