标签: dbcontext

在StructureMap中为控制台应用程序设置DbContext的最佳做法是什么?

我使用StructureMap,EF 4.1/POCO.控制台应用程序假设在某些数据集上运行2个后续操作,比如说operation1和operation2.我将DbContext设置为单例.这会导致操作2出现问题,因为operation1在其DbContext中留下了一些垃圾,这会阻止operation2正常工作.同时我无法将DbContext设置为"每次调用".coz operation1使用2个存储库共享通过其构造函数的相同DbContext.理想情况下,我需要在operation2之前重新初始化/重置/清理DbContext.有任何想法吗?

谢谢

structuremap poco entity-framework-4.1 dbcontext

1
推荐指数
1
解决办法
2928
查看次数

EF:选择子类的所有实体(继承)

我正在使用数据库第一种方法和DbContext.我的数据模型中有几个继承结构(TPH).但是DbContext只为基类创建一个DbSet,而为子类创建没有.我应该如何检索指定子类的所有实体?

我无法根据映射标准编写查询,因为我必须从数据模型中删除这些字段.

我可以简单地将新的DbSet添加到Entities类(部分类)吗?

inheritance entity-framework-4 table-per-hierarchy database-first dbcontext

1
推荐指数
1
解决办法
1271
查看次数

EF不会在SaveChanges上更新相关实体

我正在使用延迟加载将我的EF6 MVC项目从ObjectContext迁移到DbContext.

使用ObjectContext,我可以执行以下操作:

// Create a new user:
 User u = new User();
 u.LineManagerID = 42;   // Set foreign key

 db.Users.Add(u);
 db.SaveChanges();

// get property of related entity as set above by foreign key 
 User lm = u.LineManager;
Run Code Online (Sandbox Code Playgroud)

使用DbContext,u.LineManager即使新实体被正确保存也是null,我怀疑如果我再次调用数据库就可以了.

延迟加载和动态代理都已启用.

为什么新实体不能正确刷新?

请帮忙!我可以看到这种迁移比我想象的要困难得多......!

编辑 - 我应该补充说我正在使用db-first代码生成

c# asp.net-mvc entity-framework objectcontext dbcontext

1
推荐指数
1
解决办法
2464
查看次数

如何从SQL查询返回动态对象

我有一个storeprocdure返回集合的情况,但我没有如何对象结构,因为查询是非常动态的.

一个查询可以返回:

Id | 位置| MarketSegment | ...... n列

另一个可以回来

Id | 销售代表| 位置| 地区| ...... n列

我只是简单地返回一个"对象",如下面的代码所示.我知道这不会起作用,但我怎么设置它呢?

using (DbContext db = new Context())
{

    var items = db.Database.SqlQuery<object>(
        "SP @Param1, @Param2",
        new SqlParameter("Param1", ped),
        new SqlParameter("Param2", 25)
    ).ToList();

    return Request.CreateResponse<List<object>>(HttpStatusCode.OK, items);
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我不知道是否显示SP会有所帮助,除非我能解释得更多.

每列都表示为自定义字段.用户可以创建n个自定义字段.因此,如果您为User1运行SP并且他有5个自定义字段,则每个自定义字段将在列中表示,但如果User2有3个自定义字段,则仅表示3列.我无法控制的是自定义字段名称和自定义字段数.

c# sql entity-framework dbcontext asp.net-web-api

1
推荐指数
3
解决办法
7644
查看次数

使用DbContext.Set <T> .Add()不要添加到数据库

我无法将我的存储库插入到我的数据库中.

我的背景:

public class Context : DbContext
{
    public Context() : base("MyDatabase")
    {

    }

    public DbSet<Appartment> Appartments { get; set; }
    public DbSet<Sensor> Sensors { get; set; }
    public DbSet<Measurement> Measurements { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Measurement>().HasKey(m => new {m.AppartmentId, m.SensorId});

        modelBuilder.Entity<Measurement>()
            .HasRequired(m => m.Appartment);

        modelBuilder.Entity<Measurement>()
            .HasRequired(m => m.Sensor);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的实体:

public class Appartment
{
    public int AppartmentId { get; set; }
    public int Floor { get; set; }
    public int Number { get; …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous entity-framework dbcontext

1
推荐指数
1
解决办法
771
查看次数

实体框架.ToList()很慢?(全部查询)

public List<Employee> GetEmployees(){
     var employee = new ApplicationDBContext().Employee;

     return employee.ToList();
}

//somewhere in other part of code.
//Use GetEmployees.
var employees = GetEmployees();
var importantEmployees = employees.Where(e => e.IsImportant == true);
Run Code Online (Sandbox Code Playgroud)

在性能方面,这种方法是否可行?有没有解决方案让它快速?谢谢!

c# entity-framework dbcontext

1
推荐指数
1
解决办法
773
查看次数

DbContext缓存

我知道DbContext的缓存并不是一个好主意.但我想做得很好.你怎么看待这种方式?

public class Context : DbContext
{
    private Context()
    {
    }

    private static WeakReference<Context> _cachedContext;

    public Context Instance
    {
        get
        {
            Context context;
            if (!_cachedContext.TryGetTarget(out context))
            {
                context = new Context();
                _cachedContext.SetTarget(context);
            }
            return context;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

计划在没有IDisposable的情况下使用此代码.在客户端进行调用.除了单身(反)模式,这会导致什么问题?谢谢.

c# entity-framework dbcontext

1
推荐指数
2
解决办法
4288
查看次数

将DbContext添加到所有类,而不仅仅是.NET Core中的控制器

我想将我当前的DbContext添加到我使用的任何类中,目前我只是像传统变量一样传递_context.

在这个控制器示例中,每次我想创建一个Item时,我都会传递_context

[HttpPost("receta/{id}")]
[APIauth("medico")]
public IActionResult PostItemsReceta(int id, [FromBody]Data[] items) {
    var tran = _context.Database.BeginTransaction(); //DBB transaction begins
    try {
        foreach (Data item in items)
            new Item(id, item, _context); //I pass the _context like this.

        tran.Commit();
        return Ok();

    } catch (Exception e) {
        tran.Rollback();
        return BadRequest("Not inserted!!");
    }            
}
Run Code Online (Sandbox Code Playgroud)

在课程项目中,我有这个

public class Item
{
    [Key]
    public int id { get; set; }
    public DateTime? fcaducidad { get; set; }
    public string nombre { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework dbcontext .net-core asp.net-core

1
推荐指数
1
解决办法
2472
查看次数

拥有大型dbContext会有性能影响吗?

我正在构建一个在一个数据库中有30-35个表的Web应用程序.现在问题是我想将应用程序拆分为3个不同的前端(不同的团队需要不同的东西).3个不同的项目.

App1可能使用15-20个表,App2可能使用10个,App3可能使用15个.

我计划创建一个名为Models的项目,该项目具有dbContext,其中包含数据库中的所有表,并将其用于Web应用程序项目.如果我需要添加或更新数据库,我可以更新一个模型项目.

一位同事提到你应该只包括你需要的东西,所以我应该为每个web项目制作3个独立的dbcontexts,否则会因为包含不必要的表而受到性能影响.

c# asp.net performance entity-framework dbcontext

1
推荐指数
2
解决办法
579
查看次数

通过SignalR Core访问数据库上下文

我正在使用AspNetCore.SignalR,并且需要有关如何通过集线器访问SQL Server数据库的建议。有关此的资源不多。我知道如何添加一个单例,但以后不知道如何访问它。如何访问使用集线器任务内Startup.cs中的Configuration.GetConnectionString定义的数据库上下文?

谢谢。

以下是相关代码:

启动文件

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
        });


    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

    DbContextOptionsBuilder<PlayerContext> PlayerContextOptions = new DbContextOptionsBuilder<PlayerContext>();
    PlayerContextOptions.UseSqlServer(Configuration.GetConnectionString("Default"));
    services.AddSingleton(PlayerContextOptions.Options);

    services.AddDbContext<PlayerContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Default")));



    services.AddCors(options => options.AddPolicy("CorsPolicy",
        builder =>
        {
            builder.AllowAnyMethod().AllowAnyHeader()
            .AllowCredentials();
            }));

    services.AddSignalR();
} 
Run Code Online (Sandbox Code Playgroud)

但是我根本不知道该在Hub文件中做什么。我什至不知道从哪里开始。我添加了单例,但是我不知道如何在我的中心文件中访问它。这是我想做的,但是我愿意做一个更好的方法:

MyHub.cs

using (PlayerContext dbContext = new PlayerContext(/* Singleton needs to go here */))
{
    // do database stuff
} 
Run Code Online (Sandbox Code Playgroud)

c# dbcontext signalr signalr-hub asp.net-core-signalr

1
推荐指数
2
解决办法
1758
查看次数