小编Obj*_*der的帖子

实体框架,DBContext和using()+ async?

关于实体框架,有很长时间以来一直困扰着我.

去年我为使用EF的客户编写了一个大型应用程序.在开发过程中,一切都很顺利.

我们八月发货了.但几周后我开始在生产服务器上看到奇怪的内存泄漏.运行几天后,我的ASP.NET MVC 4进程占用了机器的所有资源(8 GB).这不好.我在网上搜索,看到你应该在一个using()块中包围所有的EF查询和操作,以便可以处理上下文.

在一天中,我重构了我要使用的所有代码using(),这解决了我的问题,因为这个过程依赖于稳定的内存使用.

我首先没有围绕我的查询的原因是我从Visualofite中包含的Microsofts自己的脚手架开始了我的第一个控制器和存储库,这些没有使用包围它的查询,而是它具有DbContext作为实例变量的控制器本身.

首先:如果处理上下文非常重要(某些事情不会很奇怪,dbconnection需要关闭等等),微软可能应该在他们的所有示例中都有这个!

现在,我已开始与我在我的后脑勺所有学习收获一个新的大项目工作,我一直在试用的.NET 4.5和EF 6的新功能asyncawait.EF 6.0具有所有这些异步方法(例如SaveChangesAsync,ToListAsync等等).

public Task<tblLanguage> Post(tblLanguage language)
{
    using (var langRepo = new TblLanguageRepository(new Entities()))
    {
        return langRepo.Add(RequestOrganizationTypeEnum, language);
    }
}
Run Code Online (Sandbox Code Playgroud)

在课堂上TblLanguageRepo:

public async Task<tblLanguage> Add(OrganizationTypeEnum requestOrganizationTypeEnum, tblLanguage language)
{
    ...
    await Context.SaveChangesAsync();
    return langaugeDb;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我现在在一个using()块中包含我的语句时,我得到异常DbContext was disposed,在查询能够返回之前.这是预期的行为.查询运行async,using块在查询之前完成.但是在使用ef 6的async和await函数时,我应该如何以适当的方式处理我的上下文?

请指出我正确的方向.

using()需要EF 6?为什么微软自己的例子从未有过这样的特色?如何正确使用异步功能并处理上下文?

.net c# asynchronous entity-framework using

25
推荐指数
3
解决办法
2万
查看次数

Xcode 4.2编译原型单元失败

我正在尝试新的Xcode 4.2 Beta,我想知道我的代码是错误的还是我碰到了一个bug.

新的故事板功能很有前途,但目前非常多.现在我用tableview创建了一个简单的项目.此tableview将是包含UITextFields的"分组样式".故事板的新"原型单元"功能允许您在GUI中创建原型单元,您可以使用方法cellForRowAtIndexPath中的"重用标识符"进行绘制.当我在这个"原型单元格"中拖入UITextField并将其绘制出来时,效果很好!

然而!当我将此文本字段引用到我的代码中的插座时,我收到错误:未分类编译失败.无法写入路径:...(DerivedData的路径)

为什么是这样?这是一个错误吗?其他人得到这个吗?

xcode interface-builder storyboard

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

iOS PHAssetCollection localizedTitle始终返回英文名称

我正在使用Apples Photos Framework将PHAssetCollections加载到我的应用程序中.我总是得到智能收藏的英文名称.例如,我得到'收藏'而不是'收藏家'(瑞典语).我认为localizedTitle属性将返回模拟器或iPhone运行的语言.(在具有瑞典语和地区的iPhone上运行).

有人遇到过这种情况么?示例代码:

NSArray *collectionsFetchResults;
NSMutableArray *localizedTitles = [[NSMutableArray alloc] init];

PHFetchResult *smartAlbums = [PHAssetCollection       fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum
                                                                            subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
PHFetchResult *syncedAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum
                                                                       subtype:PHAssetCollectionSubtypeAlbumSyncedAlbum options:nil];
PHFetchResult *userCollections = [PHCollectionList fetchTopLevelUserCollectionsWithOptions:nil];

// Add each PHFetchResult to the array
collectionsFetchResults = @[smartAlbums, userCollections, syncedAlbums];

for (int i = 0; i < collectionsFetchResults.count; i ++) {

    PHFetchResult *fetchResult = collectionsFetchResults[i];

    for (int x = 0; x < fetchResult.count; x ++) {

        PHCollection *collection = fetchResult[x];
        localizedTitles[x] = collection.localizedTitle;
        NSLog(@"%@", collection.localizedTitle); //<= Always …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c ios photosframework phassetcollection

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

在目标c中执行选择器主线程的最佳方法是什么?

我正在为iPhone编写客户端 - 服务器应用程序.我有一个关于线程的问题.当我从设备访问我的在线数据库时,我需要在单独的线程上执行此操作以不冻结UI /主线程.但是当响应我从数据库中获取的数据时,我在主线程上调用此方法:performSelectorOnMainThread.问题是,这只允许我向方法(WithObject)发送一个参数/对象,有时我有更多我想传递的参数.关于它的另一件事是我必须通过这一个对象.如果我发现应用程序崩溃,我无法通过nil.

这是我今天的代码..我担心我正在使用这些方法并以错误的方式进行操作.

- (IBAction)testServerAction:(id)sender {

    [self.imageView setHidden:YES];
    [self.activityView setHidden:NO];
    [self.activityView startAnimating];
    dispatch_queue_t testServer = dispatch_queue_create("Test-Server-Thread", NULL);
    dispatch_async(testServer, ^{

        if ([self.arrayWithServerConnections count] > 0)
        {
            NSString *messageToShow;
            if ([self testServerMethod])
            {
                messageToShow = @"Server is working!";
                [self performSelectorOnMainThread:@selector(showMessageBoxWithString:) withObject:messageToShow waitUntilDone:YES];
                [self performSelectorOnMainThread:@selector(threadedUIActivityRemover:) withObject:nil waitUntilDone:YES];
            }else
            {
                messageToShow = @"Server is NOT working!";
                [self performSelectorOnMainThread:@selector(showMessageBoxWithString:) withObject:messageToShow waitUntilDone:YES];
                [self performSelectorOnMainThread:@selector(threadedUIActivityRemover:) withObject:nil waitUntilDone:YES];
            }
        }

    });

    dispatch_release(testServer);
}

-(void)threadedUIActivityRemover:(NSString *)string
{
    [self.imageView setHidden:NO];
    [self.activityView setHidden:YES];
    [self.activityView stopAnimating];
}
Run Code Online (Sandbox Code Playgroud)

这是一个很好的方法吗,除了performSelectorOnMainThread还有什么可以指向我,这更好吗?

正如你所看到的,在这个例子中我将nil传递给NSString参数,因为我必须传递一些东西,如果我没有NSString作为方法中的arg,应用程序在传递nil时崩溃evan ..为什么这个?请让我对此更清楚一点! …

xcode multithreading objective-c performselector

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

Objective-C中的块和对象

我已经开始学习如何在Objective-C中使用块/函数/ lambda.但我不能让它与Objects一起工作.可能我错过了一些指针,但是它不起作用.这是我目前的代码:

MyEventArgs (^skapaEventArg)(Operation); 
skapaEventArg = ^(Operation a) { return *[[MyEventArgs alloc] initWithOperation:a]; };
MyEventArgs *a = skapaEventArg(Add);
Run Code Online (Sandbox Code Playgroud)

但是我得到了这张照片显示的错误:

http://img18.imageshack.us/img18/7499/blocksab.png

如果我做

MyEventArgs a = skapaEventArg(Add);
Run Code Online (Sandbox Code Playgroud)

把它放在堆栈上,Xcode给了我通常的"接口不能静态分配" - 错误

如何使用块来使这个简单的代码工作?

lambda xcode function objective-c objective-c-blocks

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