实体框架持久记录到DB

时间:2016-07-22 12:31:27

标签: c# sql-server database entity-framework entity-framework-6

我已经回到了Entity框架的项目。 我的数据库关系是在数据库上强制执行的,而不仅仅是在业务层上。

当我尝试添加记录时,我有一个外键约束,该记录刚刚创建了一个新的子记录。

下面是我的表和codee的一个简单示例。

主要表

  • Id int(pk)
  • ChildId int(fk)
  • 姓名nvarchar(50)

儿童表   - Id int(pk)   - 姓名nvarch(50)

 private static int addChild(string name)
    {
        using (var context = new DatabaseEntity())
        {
            var table = new DBChildTable() { Name = name };
            context.DBChildTable.Add(table);
            context.SaveChanges();

            return table.Id;

        }
    }

    private static int addMain(int childId, string name)
    {
        using (var context = new DatabaseEntity())
        {
            var table = new DBMainTable() { Name = name, ChildId = childId };
            context.DBMainTable.Add(table);
            context.SaveChanges();

            return table.Id;

        }
    }

    private static void basiceLogic()
    {
        int childId = addChild("Child");
        addMain(childId, "Main");
    }

我正在使用Entity框架6和SQL服务器后端数据库。

我确实记得,我需要在上下文或某处添加一个命令来告诉代码将记录从内存实体框架中保存到数据库。

任何帮助?

由于

1 个答案:

答案 0 :(得分:0)

在这个问题上花了太长时间并在论坛之间来回,我终于找到了结果。

下面是我必须改变以使其工作的代码,但现在它可以工作。 (使用的代码是示例中的代码)

我需要添加一个dispose并重新创建上下文。即使我最初在使用和静态方法逻辑中有上下文,但上下文并没有真正处理。因此,在第二次插入中查询之前,新数据库记录不会持久存储到数据库中。

感谢所有试图提供帮助的人,但我想我会坚持我的决心,那里的其他人就是这个小问题。

private static Models.Blog.blogEntity context;
    public static string AddComment(int blogId, string email, string name, string comment)
    {
        context = new Models.Blog.blogEntity();                
        string blogName = String.Empty;

        blogName = Models.Blog.Queries.BlogQuery.NameById(blogId);

        getUserId(email);

        createUser(email, name);

        context.Dispose();
        context = new Models.Blog.blogEntity();

        createComment(blogId, userId, comment);

        context.Dispose();
        return blogName;

    }


    private static void getUserId(string email)
    {
        userId = 0;
        var user = context.users.FirstOrDefault(x => x.emailAddress.Equals(email));
        if(user !=null)
        {
            userId = user.id;
        }
    }

    public static void createUser(string emailAddress, string name)
    {
        if(userId.Equals(0))
        {
            var data = new Models.Blog.user()
            {
                emailAddress = emailAddress,
                name = name,
                password = "NOT NEEDED",
                userlevel = 0,
                created = DateTime.Now
            };
            context.users.Add(data);
            context.SaveChanges();                
            userId = data.id; 
        }        


    }

    public static void createComment(int blogId, int userId, string comment)
    {           

        var data = new Models.Blog.comment()
        {
            body = comment,
            blogId = blogId,
            createdBy = userId,
            created = DateTime.Now
        };
        context.comments.Add(data);
        context.SaveChanges();
        commentId= data.id;           
    }