我使用StructureMap,EF 4.1/POCO.控制台应用程序假设在某些数据集上运行2个后续操作,比如说operation1和operation2.我将DbContext设置为单例.这会导致操作2出现问题,因为operation1在其DbContext中留下了一些垃圾,这会阻止operation2正常工作.同时我无法将DbContext设置为"每次调用".coz operation1使用2个存储库共享通过其构造函数的相同DbContext.理想情况下,我需要在operation2之前重新初始化/重置/清理DbContext.有任何想法吗?
谢谢
我正在使用数据库第一种方法和DbContext.我的数据模型中有几个继承结构(TPH).但是DbContext只为基类创建一个DbSet,而为子类创建没有.我应该如何检索指定子类的所有实体?
我无法根据映射标准编写查询,因为我必须从数据模型中删除这些字段.
我可以简单地将新的DbSet添加到Entities类(部分类)吗?
inheritance entity-framework-4 table-per-hierarchy database-first dbcontext
我正在使用延迟加载将我的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代码生成
我有一个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列.我无法控制的是自定义字段名称和自定义字段数.
我无法将我的存储库插入到我的数据库中.
我的背景:
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) 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)
在性能方面,这种方法是否可行?有没有解决方案让它快速?谢谢!
我知道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的情况下使用此代码.在客户端进行调用.除了单身(反)模式,这会导致什么问题?谢谢.
我想将我当前的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) 我正在构建一个在一个数据库中有30-35个表的Web应用程序.现在问题是我想将应用程序拆分为3个不同的前端(不同的团队需要不同的东西).3个不同的项目.
App1可能使用15-20个表,App2可能使用10个,App3可能使用15个.
我计划创建一个名为Models的项目,该项目具有dbContext,其中包含数据库中的所有表,并将其用于Web应用程序项目.如果我需要添加或更新数据库,我可以更新一个模型项目.
一位同事提到你应该只包括你需要的东西,所以我应该为每个web项目制作3个独立的dbcontexts,否则会因为包含不必要的表而受到性能影响.
我正在使用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) dbcontext ×10
c# ×8
.net-core ×1
asp.net ×1
asp.net-core ×1
asp.net-mvc ×1
asynchronous ×1
inheritance ×1
performance ×1
poco ×1
signalr ×1
signalr-hub ×1
sql ×1
structuremap ×1