小编Big*_*ddy的帖子

导航属性的包含是否可以使用EF6嵌套在Web API中?

从我Web API使用generic-repository/uow模式的服务开始EF6,我需要返回嵌套的导航属性.模型A具有模型B,模型B具有模型C等.像这样的东西:

public class A
    {
        public int SomeID { get; set; }
        public ICollection<B> Bs { get; set; }
    }    
public class B
    {
        public int SomeID { get; set; }
        public ICollection<C> Cs { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

我可以在A中获得B,但是B中的C是空的.这就是我这样做的方式:

// GENERIC REPOSITORY
public IQueryable<TEntity> Get(params Expression<Func<TEntity, object>>[] includes)
        {
            IQueryable<TEntity> query = _dbSet;
            if (includes != null)
            {
                foreach (var include in includes)
                    query = query.Include(include);
            }
            return query;
        }
//  FROM THE "A" …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework unit-of-work repository-pattern asp.net-web-api

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

Parallel.ForEach - 具有嵌套实例对象的线程安全性

在这种情况下,Employee和/或Illness实例是否是线程安全的?每个线程都有自己的对象副本吗?最初我认为每个线程都有自己的副本,但现在我不确定.

Parallel.ForEach(line01s, _options, o =>
{
    var employee = new Employee();
    // set values on employee...Safe?

    var illness = new Illness();
    // set values on illness...Safe?

    employee.AddIllness(illness);  // Illness is a property on Employee

}
Run Code Online (Sandbox Code Playgroud)

是否可以在错误的Employee对象上设置Illness对象?我是否需要在employee.AddIllness(疾病)周围添加锁定; ?我使用这个TPL的东西越多,我发现我就越不理解

c# task-parallel-library

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

C#GC.Collect()和Memory

我收到一个非常大的列表作为方法参数,并希望在使用它后从内存中删除它.通常我会让GC做它的事情,但我需要非常小心这个应用程序中的内存使用.

这段代码会实现我的目标吗?我读过很多不同意见,很困惑.

public void Save(IList<Employee> employees)
    {
        // I've mapped the passed-in list
        var data = Mapper<Employee, EmployeeDTO>.MapList(employees);

        // ?????????????
        employees = null;
        GC.Collect();

        // Continues to process very long running methods....
        // I don't want this large list to stay in memory

   }
Run Code Online (Sandbox Code Playgroud)

也许我应该使用另一种我不知道的技术?

c# garbage-collection

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

使用Web API在MVC中进行Knockout Paging

我无法将此代码转到页面.表的页面大小始终相同 - 从Web API调用返回的项目数.传入的参数被忽略(3).此外,后退和前进按钮元素没有图标(图标 - 后退图标 - 前进 - 后退),但这是页面大小的次要.

HTML

<table class="table">
    <thead>
        <tr>
            <th data-column="LastName">Last Name</th>
            <th data-column="FirstName">First Name</th>
            <th data-column="EnrollmentDate">Enrollment Date</th>
        </tr>
    </thead>
    <tbody data-bind="foreach: students">
        <tr>
            <td data-bind="text: LastName" />
            <td data-bind="text: FirstName" />
            <td data-bind="text: EnrollmentDate" />
        </tr>
    </tbody>

    <tfoot>
        <tr>
            <td>
                Number of items per page:
                <select id="pageSizeSelector" data-bind="value: pageSize">
                    <option value="1">1</option>
                    <option value="2">2</option>
                    <option value="3">3</option>
                    <option value="4">4</option>
                    <option value="5">5</option>
                    <option value="6">6</option>
                    <option value="7">7</option>
                    <option value="8">8</option>
                    <option value="9">9</option> …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-web-api knockout.js

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

在Async/Await方法中使用ThreadPool和Task.Wait

我刚刚遇到这个代码.我立即开始畏缩和自言自语(不是好事).事情是我不明白为什么,也不能合理地阐明它.它对我来说真的很糟糕 - 也许我错了.

public async Task<IHttpActionResult> ProcessAsync()
{
     var userName = Username.LogonName(User.Identity.Name);    
     var user = await _user.GetUserAsync(userName);

     ThreadPool.QueueUserWorkItem((arg) =>
        {
            Task.Run(() => _billing.ProcessAsync(user)).Wait();
        });    
     return Ok();
}
Run Code Online (Sandbox Code Playgroud)

这段代码让我觉得它不必要地用ThreadPool.QueueUserWorkItem和创建线程Task.Run.此外,它看起来有可能在重负载时出现死锁或造成严重的资源问题.我对么?

_billing.ProcessAsync()方法是等待的(异步),所以我希望一个简单的"await"关键字是正确的,而不是所有这些其他的包袱.

.net c# task-parallel-library async-await

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

C#任务ContinueWith不按预期工作

在继续执行之前如何等待上一个方法完成?我觉得这很容易,但事实并非如此.即使我已经阅读了很多例子,我也必须做一些非常愚蠢的事情.在下面的代码中,我不能让GetDocVM()方法执行,直到AddUserDocuments()方法完成.为什么?因为GetDocVM() 不会引入刚刚添加的记录.我继承了这段代码,并试图改进它.

ut.ModelJSON = await Task.Run(() => _userTransactionService.ConvertToModelJson(typeof(UserDocument).Name, "", transactionDocs)).ConfigureAwait(false);
var taskReturnsVoid = Task.Run(() => _genericUploadService.AddUserDocuments(ut, docs));
List<GenericUploadDocumentViewModel> viewModel = new List<GenericUploadDocumentViewModel>();
await taskReturnsVoid.ContinueWith((t) =>
           {
                 viewModel = GetDocVM();//I EXPECTED THIS TO WAIT TO BE EXECUTED
           });
return Json(viewModel, JsonRequestBehavior.AllowGet);  //GETTING HERE TOO SOON
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc task-parallel-library async-await

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