与FromSql()一起使用的简单契约

时间:2018-04-09 02:29:12

标签: entity-framework-core

随着最近的改进,我希望从Dapper转回EF(Core)。

我们的大多数代码目前使用映射实体到表的标准模式,但是我们也希望能够进行映射到简单POCO的简单即席查询。

例如,假设我有一个返回字符串结果集的SQL语句。我按如下方式创建了一个类......

function close(){
  console.log("It's bad to declare on the global scope");
}
console.log(window.close.toString());
window.close(); // our function

var iframe = document.createElement('iframe');
iframe.style.cssText = 'opacity:0;position:absolute';
iframe.src = 'about:blank';
iframe.onload = function() {
  console.log(iframe.contentWindow.close.toString());
  // you could call it like this
  iframe.contentWindow.close.call(window);
  // even if it will not work here because we didn't open the page programmatically
  document.body.removeChild(iframe);
};
document.body.appendChild(iframe);

..并称之为。

public class SimpleStringDTO
{
    public string Result { get; set; }
}

我的想法是,我可以将相同的DBSet和POCO用于其他表的其他简单查询。

当我执行它时,EF会抛出错误"实体类型' SimpleStringDTO'需要定义主键。"。

我真的需要将另一个字段定义为PK吗?在没有定义PK的情况下会出现这种情况。我只想要一些简单而灵活的东西。理想情况下,我根本不定义DBSet或POCO,只需将结果直接返回public DbSet<SimpleStringDTO> SingleStringResults { get; set; } public IQueryable<SimpleStringDTO> Names() { var sql = $"select name [result] from names"; var result = this.SingleStringResults.FromSql(sql); return result; } 即可。

有人可以指点我这里的最佳做法吗?

1 个答案:

答案 0 :(得分:0)

当我等待EF Core 2.1时,我最终为我的模型添加了假钥匙

[Key]
public Guid Id { get; set; }

然后从SQL返回一个假的Guid。

var sql = $"select newid(), name [result] from names";