markrendle / Simple.Data

A light-weight, dynamic data access component for C# 4.0
MIT License
1.33k stars 303 forks source link

Error when adding a column from a joined view in a different schema to a Where clause. #325

Open jjamsek opened 10 years ago

jjamsek commented 10 years ago

I'm using Simple.Data.Ado with Simple.Data.SqlServer in an ASP.Net MVC 3 application.

I'm getting an exception when I add a column from a joined view to a where clause.

Consider the following two queries where both of the queries select the same columns from a joined view, the first one works, but the second one fails when adding one of the selected columns to the where clause.

var thisWorks = db.someSchema.SomeTable.FindAllById(1) .Join(db.anotherSchema.SomeView).On(JoinColumn: db.someSchema.SomeTable.JoinColumn) .Select(db.anotherSchema.SomeView.JoinColumn, db.anotherSchema.SomeView.AnotherColumn) .Where(db.someSchema.SomeTable.JoinColumn == SomeId).ToList();

var thisDoesntWork = db.someSchema.SomeTable.FindAllById(1) .Join(db.anotherSchema.SomeView).On(JoinColumn: db.someSchema.SomeTable.JoinColumn) .Select(db.anotherSchema.SomeView.JoinColumn, db.anotherSchema.SomeView.AnotherColumn) .Where(db.someSchema.SomeTable.JoinColumn == SomeId && db.anotherSchema.SomeView.AnotherColumn.Like("SomeValue%")).ToList();

The exception I receive and stack trace follows;

No matching table found, or insufficient permissions. Simple.Data.UnresolvableObjectException ObjectName = "someSchema.anotherSchema"

StackTrace:

at Simple.Data.Ado.Schema.TableCollection.Find(String tableName, String schemaName) at Simple.Data.Ado.Schema.TableCollection.Find(ObjectName tableName) at Simple.Data.Ado.Schema.DatabaseSchema.FindTable(ObjectName tableName) at Simple.Data.Ado.Joiner.<>cDisplayClass14.b13(ObjectName _) at System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey key, Func2 valueFactory) at Simple.Data.Ado.Joiner.AddJoin(ObjectName table1Name, ObjectName table2Name, JoinType joinType) at Simple.Data.Ado.Joiner.GetJoinClauses(ObjectName mainTableName, SimpleExpression expression) at Simple.Data.Ado.QueryBuilderBase.HandleJoins() at Simple.Data.SqlServer.SqlQueryBuilder.Build(SimpleQuery query, IEnumerable1& unhandledClauses) at Simple.Data.SqlServer.SqlCustomQueryBuilder.Build(AdoAdapter adapter, Int32 bulkIndex, SimpleQuery query, IEnumerable1& unhandledClauses) at Simple.Data.Ado.QueryBuilder.Build(SimpleQuery query, IEnumerable1& unhandledClauses) at Simple.Data.Ado.AdoAdapterQueryRunner.GetQueryCommandBuilders(SimpleQuery& query, IEnumerable1& unhandledClauses) at Simple.Data.Ado.AdoAdapterQueryRunner.RunQuery(SimpleQuery query, IEnumerable1& unhandledClauses) at Simple.Data.Ado.AdoAdapter.RunQuery(SimpleQuery query, IEnumerable1& unhandledClauses) at Simple.Data.DatabaseRunner.RunQuery(SimpleQuery query, IEnumerable`1& unhandledClauses) at Simple.Data.SimpleQuery.Run() at Simple.Data.SimpleQuery.ToList()