我表中的数据在SQL中没有主键。在Entity Framework模型中,我将PK设置为acol(即使对于acol的某些值有多个行)。
数据存储如下
#include <mydata.hpp>
#include <QGuiApplication>
#include <QMap>
#include <QQmlApplicationEngine>
#include <QQmlComponent>
#include <QQmlContext>
#include <QQuickView>
#include <iostream>
int main(int argc, char *argv[])
{
MyData test1("Hi");
MyData test2("Hello");
QMap<QString, QVariant> mymap; // QVariantMap
QVariant qvtest1(test1); // error: no matching function for call to ‘QVariant::QVariant(MyData&)’
//working:
QVariant qvtest1, qvtest2;
qvtest1.setValue(test1);
qvtest2.setValue(test2);
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
auto *engine = new QQmlEngine;
QQuickView view;
QQmlContext *ctxt = view.rootContext();
// this is working:
qmlRegisterType<MyData>("MyData", 1, 0, "MyData");
engine->rootContext()->setContextProperty("test1", &test1);
// this produces an error: calling a private constructor of class 'QVariant'
engine->rootContext()->setContextProperty("mymap", &mymap);
QQmlComponent component(engine, QUrl("qrc:/main.qml"));
QQmlEngine::setObjectOwnership(engine, QQmlEngine::CppOwnership);
QObject *object = component.create();
return app.exec();
}
我有这样的查询
AAATable
acol bcol
124 125
124 126
然后我循环进行数据记录
var AAATableList = (from tdrc in db.AAATable
where tdrc.acol == id
select tdrc).ToList();
克劳斯(crouse),表中有2行,所以我在日志中写了2行,但是值写成如下
125
125
而不是125126
更新
foreach (var itemB in AAATableList)
{
Logger.WriteLog("AAATable.txt", itemB.bcol.ToString());
}
返回2
AAATable.Count()
返回125
AAATable.First().bcol.ToString()
返回124
AAATable.First().acol.ToString()
返回125
AAATable.Last().bcol.ToString()
返回124
这个想法是在循环foreach循环的同时获得125和126的值, 但是相反,我得到了125和125
答案 0 :(得分:0)
,在Entity Framework模型中,我将PK设置为acol。所以也许那是 回答?
是的,这就是问题的原因。您告诉Entity Framework acol
是一个PK,但是您的数据如下所示:
AAATable
acol bcol
124 125
124 126
换句话说,您对Entity Framework撒了谎(您说每个值124只有一条记录),并且它是caught you所在。 :)
答案 1 :(得分:0)