将 EF6 存储函数用于 Entity Framework 代码优先,我可以 return 自定义类型吗?
Using EF6 Store Functions for Entity Framework code-first, can I return a custom type?
我有一个实体 class:
public class SomeClass {
public int Id { get; set; }
public int Value { get; set; }
public string Name { get; set; }
}
使用 Moozzyk 的 EF6 Store Functions for Entity Framework code-first,我看到了将函数映射到实体类型的示例代码。
但是,当使用尚未映射为实体的类型时,我收到一个异常,指出该类型不是有效的实体类型。
示例:
[DbFunction("MyContext", "GetValueSum")]
public IQueryable<SomeClassSummary> GetValueSum()
{
return ((IObjectContextAdapter)this).ObjectContext
.CreateQuery<SomeClassSummary>(string.Format("[{0}].{1}", GetType().Name,
"[GetValueSum]()"));
}
如何将该函数的调用输出到特定类型?
要返回的类型必须具有与函数同名的列。例如,如果函数 returns 列:
Name nvarchar
Sum int
那么 SomeClassSummary 应该是:
public class SomeClassSummary {
public string Name { get; set; }
public int Sum { get; set; }
}
然后在上下文中,将class添加为复杂类型:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.ComplexType<SomeClassSummary>();
modelBuilder.Conventions.Add(new FunctionsConvention<MyContext>("dbo"));
}
我有一个实体 class:
public class SomeClass {
public int Id { get; set; }
public int Value { get; set; }
public string Name { get; set; }
}
使用 Moozzyk 的 EF6 Store Functions for Entity Framework code-first,我看到了将函数映射到实体类型的示例代码。
但是,当使用尚未映射为实体的类型时,我收到一个异常,指出该类型不是有效的实体类型。
示例:
[DbFunction("MyContext", "GetValueSum")]
public IQueryable<SomeClassSummary> GetValueSum()
{
return ((IObjectContextAdapter)this).ObjectContext
.CreateQuery<SomeClassSummary>(string.Format("[{0}].{1}", GetType().Name,
"[GetValueSum]()"));
}
如何将该函数的调用输出到特定类型?
要返回的类型必须具有与函数同名的列。例如,如果函数 returns 列:
Name nvarchar
Sum int
那么 SomeClassSummary 应该是:
public class SomeClassSummary {
public string Name { get; set; }
public int Sum { get; set; }
}
然后在上下文中,将class添加为复杂类型:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.ComplexType<SomeClassSummary>();
modelBuilder.Conventions.Add(new FunctionsConvention<MyContext>("dbo"));
}