小编Fur*_*kan的帖子

使用Entity Framework添加和更新实体

在我的上一个项目中,我使用了Entity Framework 5 Code First.我完成了我的项目,但在开发过程中遇到了很多痛苦.

我试着解释下面的痛苦:

我的数据访问逻辑层有几个数据类,如Product,ProductCategory,Order,Company,Manufacturer等......每个类都有一些其他类的引用.例如,Product实例具有ProductCategory属性.

在我的数据访问对象类的Add和Update方法中,我在上下文中将每个属性的状态(基本类型除外)设置为Unchanged或Modified.下面是一些dao类的更新方法的一部分:

context.Entry(entity).State = System.Data.EntityState.Modified;
if (entity.Category != null)
    context.Entry(entity.Category).State = System.Data.EntityState.Unchanged;

if (entity.Manufacturer != null)
    context.Entry(entity.Manufacturer).State = System.Data.EntityState.Unchanged;

foreach (var specificationDefinition in entity.SpecificationDefinitions)
{
    context.Entry(specificationDefinition).State = System.Data.EntityState.Unchanged;
    foreach (var specificationValue in specificationDefinition.Values)
    {
        context.Entry(specificationValue).State = System.Data.EntityState.Unchanged;
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码是这样的.我的一些添加或更新方法大约有30行代码.我认为我做错了什么,添加或更新实体应该不是那么痛苦但是当我没有设置对象的状态时,我要么在数据库中得到异常或重复的条目.我是否真的必须设置映射到数据库的每个属性的状态?

c# dao entity-framework-5

9
推荐指数
1
解决办法
3万
查看次数

QTcpSocket客户端自动重新连接

我正在尝试编写一段代码,定期尝试使用QTcpSocket连接到服务器,直到服务器启动并准备就绪.客户端还应自动并定期尝试在服务器关闭时重新连接,直到它再次启动或用户手动关闭程序.

我所做的是订阅QTcpSocket的连接和错误信号.当我捕获错误信号时,我基本上再次调用connectToHost方法.

我的代码会定期尝试连接到主机,直到服务器准备就绪(这部分工作正常).但是,问题是当服务器关闭时它永远不能重新连接.当连接断开时,我按预期得到RemoteHostClosedError.但是,在同一方法(我捕获RemoteHostClosedError)中再次调用connectToHost方法后,我什么也没得到.甚至QTcpSocket对象也不会发出错误信号.

我在下面给出了我的代码.

TcpServerConnector::TcpServerConnector( SocketSettings socketSettings, QObject* parent)
: QObject(parent), socket(new QTcpSocket())
{
    this->connect(this->socket, SIGNAL(connected()), this, SLOT(connectionSuccess_Handler()), Qt::DirectConnection);
    this->connect(this->socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(connectionError_Handler(QAbstractSocket::SocketError)), Qt::DirectConnection);
}


void TcpServerConnector::connectionError_Handler( QAbstractSocket::SocketError error )
{
    switch (error)
    {
    case QAbstractSocket::AddressInUseError:
        this->logger.log(LogLevel::ERR, "SOCKET ERROR: Address is already in use");
        break;
    case QAbstractSocket::ConnectionRefusedError:
        this->logger.log(LogLevel::ERR, "SOCKET ERROR: Connection refused");
        break;
    case QAbstractSocket::HostNotFoundError:
        this->logger.log(LogLevel::ERR, "SOCKET ERROR: Host not found");
        break;
    case QAbstractSocket::RemoteHostClosedError:
        this->logger.log(LogLevel::ERR, "SOCKET ERROR: Remote host closed");            
        break;  
    }


    this->socket->abort();
    this->socket->close();
    this->logger.log(LogLevel::DEBUG, "Reconnecting...");
    SystemUtil::sleepCurrentThread(1000);
    this->socket->connectToHost(ip_address, port);
} …
Run Code Online (Sandbox Code Playgroud)

c++ qt qtcpsocket

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

C#在接口及其实现者类中使用泛型

我想创建一个适用于所有IComparable类型的接口.例如

public interface SortAlgorithm<T> where T : System.IComparable<T>
{
    List<T> Sort(List<T> input);
}
Run Code Online (Sandbox Code Playgroud)

我希望它的实现者也是通用的,并且我在界面中提供了相同的规范.像下面的例子

public class InsertionSort<T> : SortAlgorithm<T>
Run Code Online (Sandbox Code Playgroud)

这是我这样做的目的.我希望我的所有排序算法都适用于实现IComparable接口的所有类型.并且希望在接口中提供T是IComparable的子类的规范.但是当我这样做时,我得到以下错误.

错误1类型'T'不能用作泛型类型或方法'Algorithms.SortingAlgorithm.SortAlgorithm'中的类型参数'T'.从'T'到'System.IComparable'没有装箱转换或类型参数转换.

我不明白这个的原因.我可以实现一个通用接口,并使其实现者类也是通用的,但是当在接口中给出规范时,我不能这样做(其中T:System.IComparable)

c# generics interface

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

在类库项目 C++ 中创建模板类

我有一个其他 C++ 项目常用的 C++ 类库项目。为了能够在我的类库项目中使用类,我编写了一个头文件,如下例所示

#pragma once
#ifdef MYLIB
# define MYLIB_EXPORT __declspec(dllexport)
#else
# define MYLIB_EXPORT __declspec(dllimport)
#endif
Run Code Online (Sandbox Code Playgroud)

没问题,直到我想在我的类库项目中创建模板类。问题是我无法导出我的模板类。

MyClass.h

template<class T>
class MYLIB_EXPORT MyClass
{
    void myMethod();
    // ...
}

template<class T>
void MyClass::myMethod()
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我收到编译错误,提示“不允许定义 dllimport 函数”。我知道是什么原因导致了问题并且我理解它。使用我的类库项目的其他项目将 MYLIB_EXPORT 关键字转换为 __declspec(dllimport)。因此,他们期望在 DLL 中定义 MyClass 的方法。但是,编译器会看到标头内的定义。

如何克服这种情况并能够导出在类库项目中定义的模板类?

c++ templates class-library

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