Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将创建的记录保存到数据库失败_C#_Entity Framework - Fatal编程技术网

C# 将创建的记录保存到数据库失败

C# 将创建的记录保存到数据库失败,c#,entity-framework,C#,Entity Framework,基本上,实体框架4.5,C4.0。Sql Server 2008 我本来打算创建新的记录并将它们插入表中,但当我检查数据库时,没有任何变化。为什么? public DbSet<IxDetails> IxDetailRecords { get; set; } IxContext ixContext = new IxContext(); var list = (from Ix in ixContext.IxDetailRecords select

基本上,实体框架4.5,C4.0。Sql Server 2008

我本来打算创建新的记录并将它们插入表中,但当我检查数据库时,没有任何变化。为什么?

public DbSet<IxDetails> IxDetailRecords { get; set; }
IxContext ixContext = new IxContext();

var list = (from Ix in ixContext.IxDetailRecords
                   select Ix).ToList();
for (int k = 0; k < 100; k++)
{
       IxDetails ix = ixContext.IxDetailRecords.Create();
       ix.EnteredBy = "";// current user;
       ix.EntryDate = DateTime.Now;
       ix.FacilityID = facility;
       ix.FirstName = "";
       list.Add(ix);
 }
 ixContext.SaveChanges();

您正在将项添加到结果中返回的列表中,而不是添加到表示数据库查询的实际集合中

如果查看ixContext.IxDetailRecords的方法,您应该会看到一个附加方法或类似的东西,具体取决于提供程序。使用它将新创建的项附加到数据库上下文。

尝试以下操作:

public DbSet<IxDetails> IxDetailRecords { get; set; }
IxContext ixContext = new IxContext();

for (int k = 0; k < 100; k++)
{
       IxDetails ix = ixContext.IxDetailRecords.Create();
       ix.EnteredBy = "";// current user;
       ix.EntryDate = DateTime.Now;
       ix.FacilityID = facility;
       ix.FirstName = "";
       ixContext.IxDetailRecords.Add(ix);
 }
 ixContext.SaveChanges();

代码优先方法如下所示:

public class YourDatabaseContext : DbContext
{
    public DbSet<IxDetails> IxDetailRecords { get; set; }
}

public class DataLoader
{    
    public void AddRecords()
    {
        using (var db = new YourDatabaseContext())
        {
            var newRecord = new IxDetailRecord {... };
            db.IxDetailRecords.Add(newRecord);
            db.Save();
        }
    }
}

瑞克在这方面击败了我,但我也打算推荐同样的。关键是你需要将记录添加到上下文中-你只是添加到一个不受上下文跟踪的列表中。我不是故意劫持,只是想确保他得到了答案。不用担心,答案才是最重要的。为什么你仍然有查询?它可以完全删除。您是否先使用EF代码?如果是这样,您可以更新您的帖子以包含您的IxContext类吗?@Love您根本不需要创建列表,只需删除该部分,然后在当前使用Add的位置使用IxContext.IxDetailRecords.Attach将其添加到列表中即可。如果我只给你代码来复制/粘贴,那么下次出现问题时,你将处于完全相同的位置。通读答案;批判性地思考这意味着什么,自己做实验,浏览相关文档/智能感知,如果你仍然有问题,请发表评论,指出问题所在和你尝试过的内容。