LiQ*_*net 8 .net c# entity-framework
当我通过使用额外的分部类向EF自动生成的类添加额外属性时,在对数据库运行查询时不会填充或填充这些属性.
例:
自动生成的类人员:
public partial class Person
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我自己的部分课
public partial class Person
{
public string DisplayName{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我进行以下查询时:
"SELECT *, (FirstName + LastName) AS DisplayName FROM [Person]"
Run Code Online (Sandbox Code Playgroud)
并使用
DbContext.Database.SqlQuery(typePerson, SQL, null)
Run Code Online (Sandbox Code Playgroud)
填充了Id,FirstName和LastName,但不填充DisplayName.
但是,当我创建一个名为MyPerson的全新类时
public partial class MyPerson
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string DisplayName{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
并运行与MyPerson类型相同的查询,同时填充DisplayName.
任何人都可以解释这个或告诉我如何解决这个问题所以我可以使用Partials而不必创建新的类/类型.
下载示例:https://www.dropbox.com/s/dayrv0jzuoju9q3/StackOverflow_EF_ExtraProperties.zip?dl=0
更新2015-12-28: 在阅读其他stackoverflow和Codeproject论坛时,我发现了另一种方法让它工作:
1)使用Typebuilder(http://www.codeproject.com/Articles/206416/Use-dynamic-type-in-Entity-Framework-SqlQuery)但由于所有类型的项目依赖性,我在查找已创建的类型时遇到问题而不是炸毁记忆;
2)到目前为止的最佳选择:使用继承.
当我用这一行创建另一个类时:
class Person_Reflect : Person { }
Run Code Online (Sandbox Code Playgroud)
我可以使用以下代码(它将忽略EDMX文件中的映射并使用反射:
List<EF.Person> listPerson = dbEntities.Database.SqlQuery<EF.Person_Reflect>(sql, new object[] { }).ToList<EF.Person>();
Run Code Online (Sandbox Code Playgroud)
尝试删除*
@"
SELECT
Id
,FirstName
,LastName
,(FirstName + ' ' + LastName) AS DisplayName
FROM [Person]"
Run Code Online (Sandbox Code Playgroud)
或者你可以这样做是代码...然后你不需要将它包含在你的原始sql中
public string DisplayName { get { return FirstName+ " " +LastName ; } }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1037 次 |
| 最近记录: |