随着最近的改进,我希望从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;
}
即可。
有人可以指点我这里的最佳做法吗?
答案 0 :(得分:0)
当我等待EF Core 2.1时,我最终为我的模型添加了假钥匙
[Key]
public Guid Id { get; set; }
然后从SQL返回一个假的Guid。
var sql = $"select newid(), name [result] from names";