相关疑难解决方法(0)

来自实体框架的SqlException - 不允许新事务,因为会话中还有其他线程在运行

我目前收到此错误:

System.Data.SqlClient.SqlException:不允许新事务,因为会话中还有其他线程在运行.

在运行此代码时:

public class ProductManager : IProductManager
{
    #region Declare Models
    private RivWorks.Model.Negotiation.RIV_Entities _dbRiv = RivWorks.Model.Stores.RivEntities(AppSettings.RivWorkEntities_connString);
    private RivWorks.Model.NegotiationAutos.RivFeedsEntities _dbFeed = RivWorks.Model.Stores.FeedEntities(AppSettings.FeedAutosEntities_connString);
    #endregion

    public IProduct GetProductById(Guid productId)
    {
        // Do a quick sync of the feeds...
        SyncFeeds();
        ...
        // get a product...
        ...
        return product;
    }

    private void SyncFeeds()
    {
        bool found = false;
        string feedSource = "AUTO";
        switch (feedSource) // companyFeedDetail.FeedSourceTable.ToUpper())
        {
            case "AUTO":
                var clientList = from a in _dbFeed.Client.Include("Auto") select a;
                foreach (RivWorks.Model.NegotiationAutos.Client client in clientList)
                { …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework transactions inversion-of-control

571
推荐指数
10
解决办法
19万
查看次数

.Net Core 3.0中IMvcBuilder AddJsonOptions放在哪里?

我刚刚将我的ASP Web API项目从.Net core 2.0升级到3.0。我在用

     services.AddMvc()
             .AddJsonOptions(options =>options.SerializerSettings.ContractResolver 
                                       = new DefaultContractResolver());
Run Code Online (Sandbox Code Playgroud)

以前是为了确保序列化JSON的小写字母。

升级到3.0后,出现此错误...

错误CS1061'IMvcBuilder'不包含'AddJsonOptions'的定义,找不到可以接受的扩展方法'AddJsonOptions'接受类型为'IMvcBuilder'的第一个参数(是否缺少using指令或程序集引用?)

根据Asp.Net Core 2.2中MvcJsonOptions的AddJsonOptions,Microsoft.AspNetCore.Mvc.Formatters.Json nuget包提供了AddJsonOptions扩展方法。我尝试安装/重新安装此程序,但仍然无法解决该方法。有趣的是,智能感知仅显示Microsoft.AspNetCore.Mvc.Formatters。即使我添加了Json nuget包,当我尝试添加using语句时也使用Xml

有什么想法吗?该文档AddJsonOptions只上升到.NET 2.2所以也许是方法已经在3.0赞成一些其他配置机制的被弃用?

asp.net json.net asp.net-core asp.net-core-3.0

35
推荐指数
5
解决办法
1万
查看次数

已经有一个与此Connection关联的开放DataReader必须先关闭+ asp.net mvc

我有一个表MySQL数据库的entites与它的多个领域,如ENTITY_TITLE,entity_description,....在表中还有3个外键user_id,region_idcategory_id.

在我的索引视图中,我想显示表中的所有实体(显示标题,描述,...,用户名,区域名称和类别名称).

这是我在我的控制器中所做的:

public ActionResult Index()
{
    var model = this.UnitOfWork.EntityRepository.Get();
    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

在我的存储库中,我这样做:

public virtual IEnumerable<TEntity> Get(
    Expression<Func<TEntity, bool>> filter = null,
    Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
    string includeProperties = "")
{
    IQueryable<TEntity> query = _dbSet;

    if (filter != null)
    {
        query = query.Where(filter);
    }

    foreach (var includeProperty in includeProperties.Split
            (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
    {
        query = query.Include(includeProperty);
    }

    if (orderBy != null)
    {
        return orderBy(query).ToList();
    }
    else …
Run Code Online (Sandbox Code Playgroud)

mysql sql asp.net asp.net-mvc entity-framework

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

必须关闭DataReader首先和我的LINQ查询

我试图使用LINQ Name从我的数据库中选择一堆对象使用EF.问题是我收到一个错误:

已经有一个与此命令关联的打开DataReader,必须先关闭它.

Project是包含有关该项目的信息的Type.它是名称类的导航属性.我的LINQ查询导致此错误有什么问题.

var allNames = from n in _db.DCENames
               orderby n.BrandName ascending
               select n;

foreach (Name name in allNames)
{
    NameDbModel data = new NameDbModel();
    data.id = name.Id;
    data.BrandName = name.BrandName; 
    data.MarkType = name.Project.MarkType;
    data.DateAdded = name.DateAdded;
    data.PrimarySector = name.Project.PrimarySector;
    data.ProjectName = name.Project.ProjectName; 
    data.Status = name.Project.ProjectStatus;
    data.ProjectId = name.Project.ProjectId;
    data.Notes = "";
    model.Add(data);
}
Run Code Online (Sandbox Code Playgroud)

c# linq

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

循环实体时的实体框架异常(虽然使用ToList()时工作)

我有一个名为MyItems的实体表,该表中的每个项都有一个到另一个表的外键.我想简单地遍历我的项目并访问每个项目的外键对象的字符串'Name'属性,如下所示:

foreach (var myItem in (from q in context.MyItems select q))
{
   string testName = myItem.ForeignItem.Name
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时,ForeignItem为null,当我尝试访问ForeignItem时,我得到一个InvalidOperationException:

已经有一个与此命令关联的打开DataReader,必须先关闭它.

但是 - 如果我这样调用ToList():

(from q in context.MyItems select q).ToList()
Run Code Online (Sandbox Code Playgroud)

我的外键对象填充得很好.我意识到ToList()会很昂贵,因为整个表将立即被检索.我怀疑在延迟加载的幕后出现了问题,但我正在理解它应该在没有调用的情况下工作ToList().

我忽略了什么吗?

编辑:我在想也许是因为使用var导致了问题,所以我尝试使用

foreach (MyItem myItem in (from q in context.MyItems select q))
{
   // loop contents
}
Run Code Online (Sandbox Code Playgroud)

相反 - 相同的结果.myItem除了保留为null的外键对象外,将填充属性.

编辑#2:我只在整个应用程序中使用一个对象上下文和一个Linq-to-Entities语句,因此我无法解释其他DataReader的运行位置.我还应该注意,这个错误发生在循环中的第一个对象,所以它不是因为前一个项被检索.

c# linq-to-entities entity-framework lazy-loading

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