我有员工表与bigint数据库中的主键字段和实体数据模型与数据库第一种方法.Employee类具有此结构
public partial class Employee
{
public long Emp_No { get; set; }
public string Name { get; set; }
public string Family { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
我用Entity Framework编写这个基本查询
List<long> ids = new List<long>() {1,2,3,4,5,6}
database.Employees.Where(q => ids.Contain(q.Emp_No)).ToList();
Run Code Online (Sandbox Code Playgroud)
它生成如下查询:
SELECT
[Extent1].[Emp_No] AS [Emp_No],
[Extent1].[Name] AS [Name],
[Extent1].[Family] AS [Family],
...
FROM [dbo].[Employee] AS [Extent1]
WHERE [Extent1].[Emp_No] IN (cast(0 as bigint),
cast(1 as bigint),
cast(2 as bigint),
cast(3 as bigint),
cast(4 as bigint),
cast(5 as bigint),
cast(6 …Run Code Online (Sandbox Code Playgroud) 我开发了一个接收短信的短信服务器,分析它们并回复消息。此应用程序使用实体框架 4.0 和 SQLServer 2008 开发。
当我收到短信时,我会为该消息运行新线程并分析和响应消息。每个线程都有自己的对象上下文的新实例,所有线程在 SQL Server 中调用相同的存储过程。
但是当大量 SMS 到达服务器并且线程数量增加时,我每次都会收到以下两个错误之一:
底层提供程序在 Open 上失败。已成功与服务器建立连接,但在登录前握手期间发生错误。(提供者:TCP 提供者,错误:0 - 指定的网络名称不再可用。)
或者
底层提供程序在 Open 上失败。已成功与服务器建立连接,但随后在登录过程中出现错误。(提供者:TCP 提供者,错误:0 - 指定的网络名称不再可用。)
我将最大池大小和连接超时增加到 400 和 150。有人可以帮助我吗?谢谢
对于一些繁重的计算,我想将临时结果放入 MemoryCache 并在需要时再次加载它。但是当我将 200 万个对象放入 Cache 时,它会抛出 OutOfMemoryException。
我在带有 8GB 内存的 Windows 7 64 位上运行程序。
当我查看任务管理器时,我发现我的应用程序只占用了 1.5 GB 内存,然后崩溃了。这段代码类似于我在我的程序中所做的
NameValueCollection config = new NameValueCollection
{
{"cacheMemoryLimitMegabytes", "4000"},
{"physicalMemoryLimitPercentage", "100"}
};
MemoryCache cache = new MemoryCache("MyCache", config);
CacheItemPolicy policy = new CacheItemPolicy { AbsoluteExpiration = ObjectCache.InfiniteAbsoluteExpiration };
for (int i = 0; i < 4000000; i++)
{
var resultOfTempOperation = DoOperation();
CacheItem newEmployee = new CacheItem(Guid.NewGuid().ToString(), new SomeClass());
cache.Add(newEmployee, policy);
}
Run Code Online (Sandbox Code Playgroud)
我的代码有什么问题?
我的数据库中有一个Employee表和一个返回与我的员工表完全相同的结构的 SQL 表值函数。我正在更改函数中表的某些字段值(如 GroupNumber)。我在 EF 中导入了该函数并将返回类型设置为员工实体。
现在我运行以下查询:
IQueryable<Employee> employeeSearchResult = this.Context.EmployeeStateAtDate(persianDate.ToDateTime());
var result = employeeSearchResult.Where(q => q.Group.Title.contains("XYZ")).Select(q => q.EmployeeN umber).ToList()
Run Code Online (Sandbox Code Playgroud)
生成的查询如下
SELECT [Filter1].[EmployeeNumber1] AS [EmployeeNumber]
FROM (
SELECT [Extent1].[EmployeeNumber] AS [EmployeeNumber1] ,
[Extent2].[GroupNumber] AS [GroupNumber1]
FROM [dbo].[kara_emp_EmployeeStateAtDate](@Date) AS [Extent1]
LEFT OUTER JOIN [dbo].[Employee] AS [Extent2] ON ( [Extent2].[GroupNumber] IS NOT NULL )
AND ( [Extent1].[EmployeeNumber] = [Extent2].[EmployeeNumber] )
) AS [Filter1]
INNER JOIN [dbo].[Groups] AS [Extent3] ON [Filter1].[GroupNumber1] = [Extent3].[GroupNumber]
WHERE [Extent3].[Title] LIKE N'%XYZ%'
Run Code Online (Sandbox Code Playgroud)
我不知道为什么,但是 EF 再次将函数与 Employee …
我想知道什么是调用嵌套异步方法的最佳方法,如果我想要两个方法都是异步的.
首先:调用者方法必须返回Task
public async Task SaveChangesAsync()
{
await Context.SaveChangesAsync();
}
public Task UpdateAsync(List<TEntity> entities)
{
foreach (TEntity entity in entities)
{
BeforeUpdate(entity);
Context.Entry(entity).State = EntityState.Modified;
}
return SaveChangesAsync();
}
Run Code Online (Sandbox Code Playgroud)
第二:调用方法必须具有async- awaitas called方法
public async Task SaveChangesAsync()
{
await Context.SaveChangesAsync();
}
public async Task UpdateAsync(List<TEntity> entities)
{
foreach (TEntity entity in entities)
{
BeforeUpdate(entity);
Context.Entry(entity).State = EntityState.Modified;
}
await SaveChangesAsync();
}
Run Code Online (Sandbox Code Playgroud) 我读了这篇文章,它有很好的指南,可以在 Go 中模拟 MongoDB。但是在方法Clone()和Copy()方法上也存在一些问题。我创建了这个接口和结构:
type ISession interface {
DB(name string) IDatabase
Close()
Clone() ISession
Copy() ISession
}
type IDatabase interface {
C(name string) ICollection
}
type MongoSession struct {
dbSession *mgo.Session
}
func (s MongoSession) DB(name string) IDatabase {
return &MongoDatabase{Database: s.dbSession.DB(name)}
}
func (s MongoSession) Clone() ISession {
//return session.clone
return s.dbSession.Clone()
}
func (s MongoSession) Copy() ISession {
return s.dbSession.Copy()
}
Run Code Online (Sandbox Code Playgroud)
但我收到了这个错误
不能使用 s.dbSession.Clone()(类型 *mgo.Session)作为返回参数中的 ISession 类型:*mgo.Session 没有实现 ISession(Clone 方法的类型错误)有 Clone() *mgo.Session …
我有一个表Employee并查看vwEmployee。vwEmployee做一些处理并返回一个与Employee表完全相同的结构。
(这是因为员工表中的某些数据无效,必须用一些处理替换)。
现在我创建数据库第一个 Entity Framework 模型并向其添加Employee表,因此在模型中我有Employee 实体映射到Employee Table。但我希望它映射到vwEmployee并从视图中获取数据。
我在“映射详细信息”窗口中更改了映射,但出现一些编译时错误
从表 Employee (Emp_Type) 到表 EmpTypes (EmpType_No) 的外键约束 'FK_Employee_EmpTypes' 从表 Employee 开始映射片段时出现问题缺少表映射:没有为表 Employee 指定映射。
如何在Employee实体中解决此问题?
我需要定义这些接口来模拟官方 mongo 驱动程序
type MgCollection interface {
FindOne(ctx context.Context, filter interface{}, opts ...*options.FindOneOptions) *mongo.SingleResult
// Other methods
}
type MgDatabase interface {
Collection(name string, opts ...*options.CollectionOptions) MgCollection
// Other methods
}
Run Code Online (Sandbox Code Playgroud)
在 mongo 驱动程序包中有两个结构mongo.Collection和mongo.Database与这些方法
func (coll *Collection) FindOne(ctx context.Context, filter interface{}, opts ...*options.FindOneOptions) *SingleResult {
// Method code
}
func (db *Database) Collection(name string, opts ...*options.CollectionOptions) *Collection {
// Method code
}
Run Code Online (Sandbox Code Playgroud)
struct *mongo.Collection正确实现了MgCollection,所以这段代码编译没有错误
var col mgdriver.MgCollection
col = &mongo.Collection{}
col.FindOne(ctx, nil, nil) …Run Code Online (Sandbox Code Playgroud) c# ×4
.net ×2
go ×2
mongodb ×2
sql-server ×2
asynchronous ×1
caching ×1
expression ×1
join ×1
login ×1
mapping ×1
mgo ×1
mocking ×1
unit-testing ×1