I\'m trying to execute an TVF with Entity Framework and for some reason it just doesn\'t work. Maybe anyone out there can help me see the problem.
Here are the code samp
[Tested] using:
Install-Package EntityFramework.CodeFirstStoreFunctions
Declare a class for output result:
public class MyCustomObject
{
[Key]
public int Id { get; set; }
public int Rank { get; set; }
}
Create a method in your DbContext class
[DbFunction("MyContextType", "SearchSomething")]
public virtual IQueryable SearchSomething(string keywords)
{
var keywordsParam = new ObjectParameter("keywords", typeof(string))
{
Value = keywords
};
return (this as IObjectContextAdapter).ObjectContext
.CreateQuery(
"MyContextType.SearchSomething(@keywords)", keywordsParam);
}
Add
public DbSet SearchResults { get; set; }
to your DbContext class
Add in the overriden OnModelCreating
method:
modelBuilder.Conventions
.Add(new CodeFirstStoreFunctions.FunctionsConvention("dbo"));
And now you can call/join with a table values function like this:
CREATE FUNCTION SearchSomething
(
@keywords nvarchar(4000)
)
RETURNS TABLE
AS
RETURN
(SELECT KEY_TBL.RANK AS Rank, Id
FROM MyTable
LEFT JOIN freetexttable(MyTable , ([MyColumn1],[MyColumn2]), @keywords) AS KEY_TBL
ON MyTable.Id = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK > 0
)
GO