Dapper: MultiMap does not return null object in left-outer-join if splitting on a surrogate key that is not a property on the target object.

Created on 16 Dec 2014  路  3Comments  路  Source: StackExchange/Dapper

This issue is really for left-outer-joins where we would expect a null object if there is no match. Unfortunately, the object is not coming back null even though the 'spliton' column is null.

Class structure
public class Post[PostID,Name,CategoryID?] //category is optional (left-outer joined)
public class Category[CategoryID,Name]

Query using aliases to split on 'id'

SELECT p.*, c.CategoryID AS id, //surrogate key helps mark the split...will be null if no matching category c.* FROM Posts p LEFT OUTER JOIN Categories c ON c.CategoryID = p.CategoryID

If there is no category, the expected behavior is that because the 'id' column is null the entire object would be null. However, because 'id' does not exist as a property on the Category object we get an instantiated object.

Note that we're splitting this way because p.* already has CategoryID so we can't explicitly split on that.

I've gone through the source code for a bit but it's a little beyond me (for now at least). I'll keep trying to pinpoint why that is happening and get a test in there to prove it.

bug needs-investigation

Most helpful comment

Is there any update regarding this issue?

All 3 comments

+1

var animals = Connection.Query<Animal, Owner, Animal>(@"
    SELECT Animal.*, NULL as split, Owner.*
    FROM Animal
    LEFT JOIN Owner ON Animal.OwnerId = Owner.OwnerId", (a, o) => { a.Owner = o; return a; }, splitOn: "split").ToList();

I would expect Owner would be NULL in this case.

any update on this or workarounds? I am using the Read method from this request https://github.com/StackExchange/dapper-dot-net/pull/308. Thanks.

Is there any update regarding this issue?

Was this page helpful?
0 / 5 - 0 ratings

Related issues

rafakwolf picture rafakwolf  路  5Comments

CrescentFresh picture CrescentFresh  路  4Comments

ishamfazal picture ishamfazal  路  5Comments

huobazi picture huobazi  路  4Comments

yozawiratama picture yozawiratama  路  5Comments