New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Release 3.0 roadmap #1764
Comments
Please add #832 to roadmap |
It is actually work in progress already #1756. I didn't added it here, because there are chances to release it before 3.0 |
When will it be released |
Approximately in month or two. But you can use it right now without Eager Loading, which needs refreshing my mind :). |
We plan to publish preview1 today with already implemented functionality #1936 |
Note: for the last few releases, there were no notifications for the I volunteer to test out the RC version when arrives, to make sure the changes would not cause awkwardly big refactors in production systems after the release of 3.0. |
Finally we are ready to release preview 2 with a lot of new features tomorrow.
3rd preview will be considered first (and hopefuly last) release candidate for v3. |
@linq2db/testers we are almost ready for 3.0rc0 release (hopefully next week, couple of small fixes left). Could you test it? |
@MaceWindu we are having a tight deadline next week, I cannot promise anything now sadly :/ |
We are releasing rc0 today. final release scheduled for next week (if @detoxhby will have time to test it). |
SqlClient issueIn projects where we use the new standalone
Installing the original package resolved the problem. We should support the new one as it's offical from Microsoft and will update more regulary than the Grouping issueI'm working towards to check other parts but |
Question: previously It is an issue as in some projects the main table is wrapped in a helpers queryable class that handles aspects like worker thread marshalling and other advanced functionality. This change effectively broke the table wrapper with loadwith as source. Any idea what could be the least-invasive way to refactor this? |
Hierarchy changed. db.GetTable<Some>().TableLoadWith(p => p.SomeProp); It will be suitable? |
@sdanyliv maybe |
@detoxhby, could you try to set provider name to |
@sdanyliv it works, but feels unnatural switching from |
Try this API SqlServerTools.Provider = SqlServerProvider.MicrosoftDataSqlClient; |
👍 nice |
❌ Union-based cross-result with group-by projection errorThe query creates cross result of same table by switching Id:Rev with ExcludedId:ExcludedRev, then groups it by Id:ExcludedId to get the last relevant entries based on revisions.
(used ReadbleExpressions visualizer; stripped unrelated fields) DbConnection
.GetTable<QuestionEnemy>()
.Where(x => ids.Contains(x.QuestionId))
.Select(
x => new QuestionEnemyCrossResult
{
QuestionId = x.QuestionId,
QuestionRevision = x.QuestionRevision,
ExcludedQuestionId = x.ExcludedQuestionId,
ExcludedQuestionRevision = x.ExcludedQuestionRevision,
DbVersion = x.DbVersion,
IsCross = false
})
.Union(
DbConnection
.GetTable<QuestionEnemy>()
.Where(x => ids.Contains(x.ExcludedQuestionId))
.Select(
x => new QuestionEnemyCrossResult
{
QuestionId = x.ExcludedQuestionId,
QuestionRevision = x.ExcludedQuestionRevision,
ExcludedQuestionId = x.QuestionId,
ExcludedQuestionRevision = x.QuestionRevision,
DbVersion = x.DbVersion,
IsCross = true
}))
.Where(x => ((int?)x.QuestionRevision) <= questionRevision)
.Join(
DbConnection
.GetTable<QuestionEnemy>()
.Where(x => ids.Contains(x.QuestionId))
.Select(
x => new QuestionEnemyCrossResult
{
QuestionId = x.QuestionId,
QuestionRevision = x.QuestionRevision,
ExcludedQuestionId = x.ExcludedQuestionId,
ExcludedQuestionRevision = x.ExcludedQuestionRevision,
DbVersion = x.DbVersion,
IsCross = false
})
.Union(
DbConnection
.GetTable<QuestionEnemy>()
.Where(x => ids.Contains(x.ExcludedQuestionId))
.Select(
x => new QuestionEnemyCrossResult
{
QuestionId = x.ExcludedQuestionId,
QuestionRevision = x.ExcludedQuestionRevision,
ExcludedQuestionId = x.QuestionId,
ExcludedQuestionRevision = x.QuestionRevision,
DbVersion = x.DbVersion,
IsCross = true
}))
.Where(x => ((int?)x.QuestionRevision) <= questionRevision)
.GroupBy(x => new
{
QuestionId = x.QuestionId,
ExcludedQuestionId = x.ExcludedQuestionId
})
.Select(
x => new QuestionEnemy
{
QuestionId = x.Key.QuestionId,
QuestionRevision = x.Max(y => y.QuestionRevision),
ExcludedQuestionId = x.Key.ExcludedQuestionId,
ExcludedQuestionRevision = x.Max(y => y.ExcludedQuestionRevision)
}),
row => new
{
QuestionId = row.QuestionId,
QuestionRevision = row.QuestionRevision,
ExcludedQuestionId = row.ExcludedQuestionId,
ExcludedQuestionRevision = row.ExcludedQuestionRevision
},
affectedRevision => new
{
QuestionId = affectedRevision.QuestionId,
QuestionRevision = affectedRevision.QuestionRevision,
ExcludedQuestionId = affectedRevision.ExcludedQuestionId,
ExcludedQuestionRevision = affectedRevision.ExcludedQuestionRevision
},
(row, affectedRevision) => row)
.Join(
DbConnection.GetTable<QuestionId>(),
enemy => enemy.ExcludedQuestionId,
question => question.Id,
(enemy, question) => new QuestionEnemyCrossResultWithCurrentEQR
{
QuestionId = enemy.QuestionId,
QuestionRevision = enemy.QuestionRevision,
ExcludedQuestionId = enemy.ExcludedQuestionId,
ExcludedQuestionRevision = enemy.ExcludedQuestionRevision,
LastExcludedQuestionRevision = question.Revision,
DbVersion = enemy.DbVersion
}) |
I have reproduced, working on fix. |
@detoxhby, you have stripped too much. There are a lot of such reasonable exceptions. |
❌ Eager-loading related issueSee #2249 |
Yes, will do it later today or tomorrow (I'm on the road currently). |
Just found that you have mentioned this function |
Because it also represents a real intention of doing this at the root level and would prevent developers to append the For real use cases, it would be wrapped inside a repository's base call where a specific pre-configurator would use it, not something the developers would do in app-code. Maybe we should drop this and only include the |
v3.0.0-rc2243 ✅ seems good, but due to #2248 (comment) I'm still only able to test 1/5 of the projects because the LoadWith behavior blocks essential parts of the applications that I cannot overcome in any way |
If you prepare small non working sample with your LoadWith extension, i'll check. |
Sadly, can't. It is just chaotic why the exact same LoadWith calls work (=loads the referenced data) into the relations while others simply stays empty without any error. I have no time to trace it down, thus I cannot prepare an exact reproducing environment. Currently the errors rise at fully random places but so far all of them was related to an earlier LoadWith (that produced empty result) that wasn't handled explicitly (so no .Any() or null checks present, because it should contain data based on preconditions). Gonna try to delegate a few hours at the weekend, but currently we have a deadline and deployment for the next weeks that steals all of energy. Will try my best to solve this. |
We decided to release rc1 tomorrow or early next week due to large amount of fixes since rc0. |
I wasn't able to provide additional information, so I will retry the whole process with rc1 and see how it works. If the results will be the same, I will focus on a separate application to reproduce the situation with empty loadwith behaviour. |
For reproducing empty |
ℹ️ FYI: new |
Not sure I get you. |
Finished the problem analysis and found a really strange behaviour:
Like you said: as of 2.x version of linq2db does not use the new SqlClient package, it couldn't handle the new format interally. The problem may not directly related to the project but could be a main pitfall for others with similar approach (using new SqlClient package in application, but for some reason stays on v2.x version of linq2db). A simple info line in release notes would be sufficient to warn people about connection string format differences. |
2.0.0 added more connection string properties aliases, but old aliases still work https://github.com/dotnet/SqlClient/blob/master/release-notes/2.0/2.0.0.md#new-connection-string-property-synonyms |
That's right, but by-default |
So... user use |
Not fault, but consequence. It's a legit scenario and even if linq2db does nothing wrong, the error still occour "inside" linq2db and it's easy to misinterpret what really happens under the hood. I've just tried to provide real-life aspects of this problem, the decision is yours to indicate it or not of course. |
I don't think it worth mentioning. It's quite unusual configuration |
@detoxhby could you create separate issues? |
@MaceWindu for each one separately or only one aggregated? |
each issue separately. Discussing different issues in single thread results in hard to track conversation |
(edited) see #2309 |
Post a new issue with simple reproducible steps. |
FYI SQL Server 2000 cannot be accessed from tests running within .Net Core -- they only work from .Net 4.6. The error message says that the version of SQL Server is not supported. I'm guessing this is due to the switch to |
@Shane32, you've just resurrected Sql Server 2000 in our minds ;) |
I spent way too much time installing that to test my code with. It probably wasn't worth it - lol! |
It was experience )) |
Closing as we plan to release today |
Approximate list of planned changes for 3.0 release
Removals:
Changes/New Features
Also check this page for list of changes
The text was updated successfully, but these errors were encountered: