Tutorial :Entity Framework - How do I join tables on non-primary key columns in secondary tables?



Question:

I want to join 2 tables using entity framework. I want the join to the second table to be on a non-primary key column.

e.g. I have a table Foo with fields

Foo.Id (PK)  Foo.DbValue  

and table Bar

Bar.Id (PK)  Bar.DbValue  Bar.Description  

And I want to join Foo to Bar in EF on the DbValue field.

In hibernate/nhibernate one can do this by adding a column parameter to a many-to-one. roughly like this

<class name="Foo" table="Foo>    <id name="Id" column="Id" />    <many-to-one name="Bar" class="Bar" column="**DbValue**" />  </class>  

Thanks in advance if anyone knows how to do this in EF.


Solution:1

Well you can't do this as a named relationship (i.e. the standard way).

So this means the relationship is NOT part of the model.

However you can still do a standard LINQ join though:

from f in ctx.Foo  join b in ctx.Bar on f.DbValue equals b.DbValue  select new {f,b}   

Hope this helps

Check out my EF Tips series.


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »