如果我使用实体框架代码第一种方法从静态方法保存数据,为什么记录不保存在数据库中?

问题描述 投票:0回答:1

我是Entity Framework代码优先方法的新手。所以请忍受我。

当我从MVC控制器操作方法调用ProductRepository类的Add方法时,数据库中的数据未更新。

public class UserProfile
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
}
public class Product
{
    [Key]
    public int Id { get; set; }
    public string Category { get; set; }
    public int UserId { get; set; }
    [ForeignKey("UserId")]
    public UserProfile User { get; set; }
}
public class FarmingDbContext: DbContext
{
    public FarmingDbContext():base("name=FarmerSiteConn"){}
    public DbSet<UserProfile> UserProfileTable { get; set; }
    public DbSet<Product> ProductTable { get; set; }
}
public static class ProductRepository
{
    private static FarmingDbContext Repository
    {
        get
        {
            return new FarmingDbContext();
        }
    }

    public static void Add(Product product)
    {
        Repository.ProductTable.Add(product);
        Repository.SaveChanges();
    }
}

但是当我按以下方式替换上述Add方法时,数据将被更新。

public static void Add(Product product)
{
    var Repository = new FarmingDbContext();
    Repository.ProductTable.Add(product);
    Repository.SaveChanges();
}

那么这个问题背后的原因是什么,请您帮帮我吗?

提前感谢。

c# asp.net-mvc database entity-framework
1个回答
0
投票

每次调用Get(存储库)方法时,都是在创建DbContext。这意味着您每次都提供一个新实例(本质上是新连接)。

 private static FarmingDbContext Repository
    {
        get
        {
            return new FarmingDbContext();
        }
    }

您的电话:

public static void Add(Product product)
{
    Repository.ProductTable.Add(product);
    Repository.SaveChanges();
}

正在执行:

(new FarmingDbContext()).Add(product);
(new FarmingDbContext()).SaveChanges();

您需要在存储库中更新Get方法以返回相同的实例,或将初始实例分配给变量。使用您要添加到的相同上下文和调用“保存在”的相同上下文非常重要。

类似的东西应该可以工作:

 public static void Add(Product product)
    {
        using (var repo = ProductRepository.Repository) 
        {
           repo.ProductTable.Add(product);
           repo.SaveChanges();
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.