gpt4 book ai didi

c# - Entity Framework 的额外属性不由 DbContext.Database.SqlQuery 填充

转载 作者:太空狗 更新时间:2023-10-29 19:45:08 24 4
gpt4 key购买 nike

当我使用额外的部分类向 EF 自动生成的类添加额外的属性时,在对数据库运行查询时不会填充或填充这些属性。

例子:

自动生成类人:

public partial class Person
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}

我自己的部分类

public partial class Person
{
public string DisplayName{ get; set; }
}

当我进行以下查询时:

"SELECT *, (FirstName + LastName) AS DisplayName FROM [Person]" 

并使用

DbContext.Database.SqlQuery(typePerson, SQL, null)

填充了 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; }
}

并使用 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 { }

我可以使用下面的代码(它将忽略 EDMX 文件中的映射并使用反射:

List<EF.Person> listPerson = dbEntities.Database.SqlQuery<EF.Person_Reflect>(sql, new object[] { }).ToList<EF.Person>();

最佳答案

到目前为止,在发生数据库更改时无需编写大量代码或进行大量代码审查的最佳选择是使用继承。

当我只用这一行创建另一个类时:

class Person_Reflect : Person { }

我可以使用下面的代码(它将忽略 EDMX 文件中的映射并使用反射):

List<EF.Person> listPerson = dbEntities.Database.SqlQuery<EF.Person_Reflect>(sql, new object[] { }).ToList<EF.Person>();

关于c# - Entity Framework 的额外属性不由 DbContext.Database.SqlQuery 填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34449416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com