【问题标题】:Best Approach to use [Column] or [ColumnAttribute] DataAnnotation in ASP.Net Core在 ASP.Net Core 中使用 [Column] 或 [ColumnAttribute] DataAnnotation 的最佳方法
【发布时间】:2017-10-13 06:27:19
【问题描述】:

我是 asp.net 核心 MVC 框架的新手(在此之前我使用的是 Laravel。)

我有两张表,Country 和 State,我将使用 InnerJoin 加入这两张表。

在我的 CountryModel 中,我有 4 个如下属性

public int CountryId { get; set; }

public string CountryName { get; set; }

public int StateId { get; set; }

public string StateList { get; set; }



SELECT c.CountryId,
       c.CountryName,
       s.StateId,
       s.States AS 'StateName'
       FROM _tbAddr_Country AS c
       INNER JOIN _tbAddr_State AS s on s.CountryId = c.CountryId

以上是我的 sql 查询,在我的 Country Model 属性中我没有“StateName”属性但我有“StateList”,我只想使用 DataAnnotation 将“StateList”映射到“StateName”,如下所示,我有试过了

[ColumnAttribute("StateName")]
public string StateList { get; set; }

[Column("StateName")]
public string StateList { get; set; }

这两个对我不起作用,我知道我可以通过简单地将“StateList”更改为“StateName”来解决这个问题,但我希望我能找到替代方法,比如使用“Column”或“ColumnAttribute”数据注释来解决这个问题。任何帮助表示赞赏。

P/S:我使用 .net core 1.1 和 SQL Server Management Studio 2014

【问题讨论】:

标签: sql-server asp.net-core data-annotations


【解决方案1】:

这不是你想的那样。

列必须与表列名匹配。但是,您有一个使用连接的投影。所以没有这样名字的表。

EntityFramework Core 1.x 和 2.0 不支持从视图或查询到任意模型的临时映射。此功能目前在 roadmap for 2.1 上以“Read-only view types in the model”形式提供。

请注意,此功能位于“延伸目标”部分。这意味着,它是 2.1 的优先级,但变化是并非所有目标都会使其成为 2.1 版本,如果在 2.1 发布时(应该在 ASP 发布时)还没有完成,可能会被推送到下一个版本.NET Core 2.1 和/或 .NET Core 2.1 版本)

【讨论】:

  • 感谢您的回复。但是我没有使用 EF Core,我使用 Sql Servre Express 作为我的数据库。
  • @noleavename:我不是在谈论您的数据库,而是在谈论您正在使用的 ORM。 Sql Client 和 ADO.NET 没有任何 ORM 功能,因此您无法在没有 ORM 框架(EF Core、Dapper、NHibernate 等)的情况下神奇地从 SQL 映射到 C# 模型类
  • 哦,我明白了,所以我唯一的方法就是重命名模型中的属性?
  • 目前,使用 EF Core(如果您使用 DbContext,它是 EF 或 EF Core - 实体框架)- 1.x 或 2.0 - 您不能这样做临时映射。对于高达 2.0 的 EF Core,您的实体必须 匹配表 和它的列。像 Dapper 这样的 MicroORM 没有这样的限制。当然你可以使用普通的 ADO.NET 和 SQL 客户端,然后你也可以进行连接,但是它们不能/不会映射到 POCO 类,你必须使用 Sql 阅读器和索引器来访问它的内容。这样你就失去了强类型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-28
  • 2022-01-03
相关资源
最近更新 更多